赋值

1
2
3
4
5
6
let a = {n:1}
let b = a
a.x = a = {n:2}

console.log(a.x) // -> undefined
console.log(b.x) // -> {n:2}

非严格相等

1
2
3
4
5
6
7
8
9
10
11
let a = {
n: 1
valueOf: function() {
return this.n*2
}
}
console.log(
a == 1 &&
a == 2 &&
a == 3
) // ->true

加法

1
2
3
4
5
6
console.log(null + undefined)  // -> NaN
console.log(NaN + '1') // -> "NaN1"
console.log(1 + true) // -> 2
console.log({n:1} + 1) // -> "[object Object]1"
console.log([1,2] + 1) // -> "1,21"
{valueOf:function(){return this},toString:function(){return this}} + 1 // 报错

与/或

布尔判定:false、null、undefined、’’、0、NaN被判定为假,其他均被判定为真

1
2
3
4
// 要注意与或运算返回的是某个被运算值,而不是转化后的布尔值
console.log(2 && 4) // -> 4
console.log(2 || 4) // -> 2
let a = obj.a || 'default' // 如果obj.a为真值,a=obj.a,否则a='default'