坑一: 字符串连接符与算术运算符隐式转换规则混淆
坑二: 关系运算符: 会把其他数据类型转换成 number 之后再比较关系
坑三: 复杂数据类型在隐式转换时会先转成 String, 然后再转成 Number 运算
坑四: 逻辑非隐式转换与关系运算符隐式转换搞混淆
20180702222841413.PNG
练习题:
- // 每个表达式是 true 还是 false 呢? 为啥呢?
- // 初阶
- !{
- }
- 12 == '12'
- 'false' == false
- null == undefined
- // 高阶
- [] == []
- [] == false
- [] === false
- [45] == 45
- // 终阶
- [45] < [46] ?
- [10] < [9] ?
- {
- } == !{
- }
- {
- } != {
- }
- -0 === +0
- NaN === NaN
- NaN != NaN
- // 转换条件 转换后类型 结果
- []+[] // String ""[1,2]+[3,4] // String"1,23,4"[]+{} // String"[object Object]"[1,2] + {a:1} // String"1,2[object Object]"
- {}+[] // Number 0
- {}+[1] //Number 1
- {a:1}+[1,2] // Number NaN
- {a:1}+{b:2} // Chrome - String "[object Object][object Object]" (背后实现 eval)
- {a:1}+{b:2} // Firefox - Number NaN
- true+true // Number 2
- 1+{a:1} // String "1[object Object]"
来源: http://www.jianshu.com/p/54c906ec604a