解释为什么在Javascript中+[] == 0输出'true'?
请检查示例.
+[] == 0 ? alert(true) : alert(false);Run Code Online (Sandbox Code Playgroud)
并检查.
'1+[+[]]'输出'10'
它将如下评估,
1: +[] == 0 - >+"" == 0
运营商+具有最高优先级,==因此将首先进行评估.因此,在将数组转换为数字时,ToPrimitive()将通过将其作为参数传递来调用函数.既然[]是object,它将返回""字符串
2: +"" == 0 - >0 == 0
空字符串将转换为0.并且非空字符串将被转换NaN为我们都知道的.
3: 0 == 0 - >true
最后根据抽象等式比较算法,当两个相同类型的操作数进行比较时,不会进行进一步的评估,它将直接检查其相等性并返回结果.
在你的第二个案例中1+[+[]],评估将发生,如,
1: 1+[+[]] - (+[]因为[]它是一个对象,将首先转换为原始)
2: 1+[+""](toPrimitive([])将"")
3: 1+[0](0当你转换一个空字符串数量将产生)
4: 1+"0"(toPrimitive([0])将"0")
5: "10"
JavaScript以+[] == 0这种方式评估:
+ []:+运算符尝试将操作数转换[]为原始值.+ []:[]使用toString()method 转换为字符串,该方法是别名[].join(',').结果是一个空字符串''+ '':空字符串转换为数字:Number('')- >0+ 0 变 0+[] == 0- > 0 == 0- >true的'1+[+[]]'评价:
1 + [ +[] ](变换[]成原始:'')1 + [ + '' ](变换''成数:0)1 + [ + 0 ](+ 0是0)1 + [ 0 ](加法运算符强制转换[0]为原始值:[0].toString()- > [0].join(',')- > '0')1 + '0'(由于第二操作数'0'是一个字符串,变换所述第一数目1为字符串太:'1')'1' + '0' (简单字符串连接)'10'另请阅读本文关于加法运算符的内容.
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |