1、加号操作
console.log(1 + NaN) // NaNconsole.log(1 + true) // 2
console.log(1 + Number(true)) // 2
console.log(1 + undefined) // NaN
console.log(1 + Number(undefined)) // NaN
console.log(1 + null) // 1
console.log(1 + Number(null)) // 1
console.log('hello' + 123) // 'hello123'
console.log('hello' + undefined) // 'helloundefined'
console.log({} + {}) // "[object Object][object Object]"
console.log([] + []) // ""
console.log({} + []) // "[object Object]"
console.log([] + {}) // 0console.log({} + {}) // "[object Object][object Object]"
console.log([] + []) // ""
console.log({} + []) // "[object Object]"
console.log([] + {}) // 0
[].toString() // ""
({}).toString() // "[object Object]"2、字符串间的比较
字符串的比较是按位进行
console.log('a' > 'b') // false
console.log('e' > 'b') // trueconsole.log('abc' > 'abe') // false
console.log('10' > '2') // false
console.log('20' > '199') // trueconsole.log('hello' > 'world') // false3、引用类型之间的比较
引用类型之间的比较会直接调用 valueOf() 返回的值进行比较,如果返回值是基本类型则转换成number类型进行比较,否则判断返回值的引用地址是否一致,如果一致则相等否则不相等。
console.log([] == []) // false
console.log({} == {}) // false4、逻辑非及其关系运算
逻辑非会将值转换成Boolean类型
关系运算会将值转换成Number类型
// 布尔值判断
console.log(!![]) // true
console.log(!!{}) // true
console.log(!!'hello') // true
console.log(!!123) // true
console.log(!!-123) // true
console.log(!!0) // false
console.log(!!'') // false
console.log(!!null) // false
console.log(!!undefined) // false
console.log(!!NaN) // false
// 关系运算
console.log(1 == true) // true
console.log(1 > null) // true
console.log(1 > undefined) // false补充
NaN是(Not a Number)的缩写,当一个值不能被Number转换时返回NaN,NaN不等于任何值,包括它自己。
console.log(null == undefined) // true
console.log(null == 0) // false
console.log(null == '') // false
console.log(null == NaN) // false
console.log(undefined == 0) // false
console.log(undefined == '') // false
console.log(undefined == NaN) // false
console.log(NaN == 0) // false
console.log(NaN == '') // false
console.log(NaN == NaN) // false
console.log(0 == '') // true