Explain why '+[] == 0' output 'true' in Javascript?
解释为什么+[] == 0在javascript中输出"true"?
请检查示例。
1
| +[] == 0 ? alert(true) : alert(false); |
还要检查一下。'1+[+[]]'给出输出'10'
- 看看这里:developer.mozilla.org /恩/文档/网络/ JavaScript /参考/ & hellip;
- stackoverflow.com 1377002 5491730 / / /
评估如下:
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()方法将[]转换为字符串,该方法是[].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'
另请阅读本文中有关加法运算符的内容。