《 JS 的基本语法》

144 阅读3分钟

什么是表达式和语句

表达式

  • 表达式是一组代码的集合,它返回一个值。接下来我们来举例说明

  • 1 + 2 表达式的值为 3

  • add(1, 2) 表达式的值为函数的返回值

  • console.log 表达式的值为函数本身

面试经:console.log(3) 表达式的值 为 undefined ,打印 3 ,不代表返回值。

一些栗子

问号冒号表达式(三元运算符)

  • 语法:表达式1 ? 表达式2 : 表达式3
n > 0 ? n :-n

短路逻辑

  • A && B && C && D 取第一个假值或 D,并不会取 true / false 。

window.f1 && console.log('f1存在') 取值为 undefined 。

|| 短路逻辑

A || B || C || D 取第一个真值或 D 。a = a || 100 这个表达式取不到值,程序会报错,因为 a 没有被创建。

语句

  • 语句(statement)是为了完成某种任务而进行的操作,比如var a = 1 + 2 ; 就是一行赋值语句。

明显的区别

  • 表达式一般都有值,语句可能没有;(不绝对)
  • 语句一般会改变环境(声明、赋值);(不绝对)
  • JS对大小写敏感,var a 和 var A 是不同的;

面试经:JS大部分回车与空格没有实际意义,唯独return后面不能加回车;

标识符的规则

  • 第一个字符,可以是Unicode 字母(包括英文字母和其他语言的字母)或者$ 或者_或者中文;
  • 第二个字符及后面的字符,除了Unicode 字母、美元符号和下划线,还可以用数字0-9;
  • 变量名是标识符;
var _ = 1
var $ = 2
var _____ = 6  //最多两个下划线
var 你好 = 'hello'

if else 语句

if (表达式) {语句 1} else {语句 2}

备注

  • 表达式可以是 a = 1
  • 语句 1 和语句 2 里可以嵌套 if...else
  • 不带{}时,缩进需要注意,只有第一个语句代码属于 if...else 的执行语句

最推荐的写法

if (表达式) {
    语句
} else if (表达式) {
    语句
} else {
    语句
}

次推荐的写法

function fn() {
    if (表达式) {
        return 表达式
    }
    if (表达式) {
        return 表达式
    }
    return 表达式
}

while for 语句

while 语句

  • While语句包括一个循环条件和一段代码块,只要条件为真,就不断循环执行代码块。
while (条件)
  语句;

// 或者
while (条件) 语句;

执行过程

  • 判断表达式的真假;
  • 当表达式为真,执行语句,执行完后再判断表达式的真假;
  • 当表达式为假,跳出循环,执行后面的语句;
var i = 0;

while (i < 100) {
  console.log('i 当前为:' + i);
  i = i + 1;
}


**面经:**因为浮点数不精确,a最接近1的值是 0.99999999999 而不会 = 1,结果就是造成死循环

let a 0.1 
console.log(a+0.1) // 多执行几次会发现结果和想象的不一样

while(a<1){
    console.log(a)
    a + 0.1 // 因为浮点数不精确,a最接近1的值是 0.99999999999 而不会 = 1,结果就是造成死循环
}

For循环

实际上 for 循环就是一个语法糖,是 while 循环的方便写法。

for(语句1;表达式2;语句3){
    循环体
}

for语句后面的括号里面,有三个表达式

初始化表达式(initialize):确定循环变量的初始值,只在循环开始时执行一次。 条件表达式(test):每轮循环开始时,都要执行这个条件表达式,只有值为真,才继续进行循环。 递增表达式(increment):每轮循环的最后一个操作,通常用来递增循环变量。

所有for循环,都可以改写成while循环。

var x = 3;
var i = 0;

while (i < x) {
  console.log(i);
  i++;
}

对照

var x = 3;
for (var i = 0; i < x; i++) {
  console.log(i);
}
// 0
// 1
// 2
  • for语句的三个部分(initialize、test、increment),可以省略任何一个,也可以全部省略。(判断条件和递增表达式省略可能造成死循环)

break continue

  • break:跳出整体循环(循环嵌套下,跳出的是离break最近的那个循环)
  • continue: 跳出本次循环,直接进入下次循环

label

  • 标签可以是任意的标识符,但不能是保留字,语句部分可以是任意语句; 标签通常与break语句和continue语句配合使用,跳出特定的循环。

面经:{foo: 1} 在浏览器中,这就是一个标签,值为 1。只有 var a = {foo: 1} 时,才是一个对象。