js面试题大坑——隐式类型转换
2019-06-04 本文已影响11人
特立独行的兔子_web
-
坑一:字符串连接符与算术运算符隐式转换规则混淆
-
坑二:关系运算符:会把其他数据类型转换成number之后再比较关系
-
坑三:复杂数据类型在隐式转换时会先转成String,然后再转成Number运算
-
坑四:逻辑非隐式转换与关系运算符隐式转换搞混淆
练习题:
// 每个表达式是 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]”