5.2 运算符优先级先看一个题吧
var a = 42;
var b = 'foo';
var c = false;
var d = a && b || c ? c || b ? a : c && b : a; // 42
代码分解: (( a && b) || c )?( (c || b )? a : (c && b )): a
1). ? :是右关联
a ? b : d ? d : e // a ? b : (d ? d : e)
2). &&运算符的优先级高于||,||的优先级高于?:
3). 如果想控制运算符的执行顺序,用()
5.4 TDZ
TDZ(暂时性死区),代码中的变量还没有初始化时不能被引用
try {
a = 2;
let a
} catch (err) {
console.log(err) // ReferenceError: Cannot access 'a' before initialization
}
有意思的是,对未声明变量使用typeof不会产生错误,但在TDZ中会报错
try {
typeof a; // console.log(typeof a) => undefined
typeof b;
let b;
} catch (err) {
console.log(err) // ReferenceError: Cannot access 'b' before initialization
}