20200301
Plan
- 你不知道的 js 中卷
Notes
- [] == ![] 结果为 true
原因是 ![] 会返回 false
- 抽象关系比较
例子 1:
var a = [4, 2];
var b = [0, 4, 2];
b < a; // true 实际上是 "042" < "42", "0" < "4"
例子 2:
var a = { b: 42 };
var b = { b: 43 };
b == a; // fasle;
b > a; // false;
a > b; //false;
b <= a; // true; 这里返回 true 是因为 b > a 返回false, 所以 b <= a 为 true
b >= a; // true;
- 语句和表达式
只要是语句,都会返回结果值。
在 chrome 控制台输入下面两行
// 声明语句
var a = 42; // undefined 这里输出 undefined 是因为:规范定义 var 的结果值是 undefined
// 赋值表达式
b = 42; // 42
- 语句结果的赋值
a = if(true) { b = 4 + 38}; // Uncaught SyntaxError: Unexpected token 'if' -- 语句的返回结果不能直接赋值给另一个。
a = eval("..."); // ok
a = do { // ES7 提案 直接在chrome控制台中是会报错的,但是在babel中会被转义成 `a = true ? b = 4 + 38 : void 0;`
if(true) {
b = 4 + 38
}
}
- ++ 运算符
a = 42;
b = a++;
b; // 42
a; // 43
b = ++a;
b; // 44
++ 在前面时,先++,再返回表达式结果。++在后面时,先返回表达式结果,再++。
++a++; // Uncaught SyntaxError: Invalid left-hand side expression in prefix operation;
// 这里先执行 a++,返回了 42,无法直接对 42 进行 ++ 操作
// 实际上是 ++42 报的错误
b = a++; // b 还是42
b = (a++, a); // b 44