1 回答
TA贡献1831条经验 获得超10个赞
1. 字符串与数字之间的相等比较,此时 字符串会被强制转换为数字
2. 其他类型和布尔值类型之间的相等比较, 布尔值会被强制转换为数字, true转为1,false 转为0
3. null 和undefined之间的相等比较, null == undefined 返回true
4. 对象和非对象之间的相等比较, 对象需要进行ToPrimitive抽象操作(如toString(), valueOf())
根据上面的四条规律,来理解下面几题:
[] == ![] 相当于 [] == false 相当于 '' == false 相等于 '' == 0 相当于 0 == 0 因此结果为true
'1' == true 相当于 '1' == 1 相当于 1==1 因此结果为true
'2' == true 相当于 '2' == 1 相当于 2 ==1 因此结果为false
'3' == true 相当于 '3' == 1 相当于 3 ==1 因此结果为false
根据规范 a<=b 会被当做 b < a,然后将结果反转,因此
null >= 0 可以理解为 !(null < 0)。 因为 null < 0 为false, 所以 null >=0 结果为true
使用+操作符时,如果其中一个操作符是对象,那么会先调用valueOf()方法,如果该方法返回基本类型值,就不再调用toString()方法。否则就调用toString()方法(有个例外,Date 的实例对象总是先调用toString,再调用valueOf)。
数组的valueOf()得不到基本类型值,所以数组会调用toString()方法。
{} + 1 的前面的{}是个空的代码块, 如果加上换车键 或许更好理解了。{} 回车 +1。 +1结果返回1了。
{var a = 10} + 1 道理跟上面一下,前面的{}是个代码块,只是后面没加回车键。+1结果返回1.
{} + {} 是两个空对象相加, 分为转为字符串({}).toString(),再相加。结果为"object Object"
+[] 相当于 Number([]), 结果为0
{} + [] 这里{}依旧是空代码块,因此返回+[]的结果,也就是0
[1,2]+ [3,4] [1,2]转为字符串'1,2' [3,4]转为字符串'3,4' , 因此结果为 "1,23,4"
+[2] 相当于 +'2' 相当于 Number('2')因此,结果为2
[2]+1 相当于 '2' +1 因此,结果为'21'
[2] + (-1) 相当于 '2'+(-1) 因此结果为'2-1'
- 1 回答
- 0 关注
- 520 浏览
添加回答
举报