1.变量提升
JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting)。
console.log(a); var a = 1;
输出 undefined 。 等同于
var a ; console.log(a); a = 1;
这就是所谓的变量提升。下面的情况不会出现变量提升, 输出 b is not defind;
console.log(b); b = 1;
2.else
代码块总是跟随离自己最近的那个if
语句
var m = 1; var n = 2; if (m !== 1) if (n === 2) console.log('hello'); else console.log('world');
上面代码不会有任何输出,else
代码块不会得到执行,因为它跟着的是最近的那个if
语句,相当于下面这样。
if (m !== 1) { if (n === 2) { console.log('hello'); } else { console.log('world'); } }
如果想让else
代码块跟随最上面的那个if
语句,就要改变大括号的位置。
if (m !== 1) { if (n === 2) { console.log('hello'); } } else { console.log('world'); } // world
3.switch
语句后面的表达式与case
语句后面的表示式,在比较运行结果时,采用的是严格相等运算符(===
),而不是相等运算符(==
),这意味着比较时不会发生类型转换
4.do...while
循环与while
循环类似,唯一的区别就是先运行一次循环体,然后判断循环条件。不管条件是否为真,do..while
循环至少运行一次,这是这种结构最大的特点。另外,while
语句后面的分号不能省略。
5.需要特别注意的是,空数组([]
)和空对象({}
)对应的布尔值,都是true
。
6.