20200301

@xiaojingzhao

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

More