解释为什么' + [] == 0'输出' true'在Javascript?

时间:2016-03-19 11:52:52

标签: javascript

解释为什么+[] == 0在Javascript中输出' true'

请检查示例。



+[] == 0 ? alert(true) : alert(false);




并检查。 '1+[+[]]'输出' 10'

2 个答案:

答案 0 :(得分:8)

将按如下方式进行评估,

1: +[] == 0 - > +"" == 0

运营商+的{​​{3}}大于==,因此将首先对其进行评估。因此,在将数组转换为数字时,将通过将其作为参数传递来调用highest priority函数。由于[]object,因此会返回""字符串

2: +"" == 0 - > 0 == 0

空字符串将转换为0。如我们所知,非空字符串将转换为NaN

3: 0 == 0 - > true

最后根据ToPrimitive(),当两个相同类型的操作数进行比较时,不会进行进一步的评估,它将直接检查其相等性并返回结果。

在你的第二个案例1+[+[]]中,评估将会发生,如

1: 1+[+[]] - ( +[]将首先转换为原语,因为[]它是一个对象

2: 1+[+""] abstract equality comparison algorithm将为""

3: 1+[0](将空字符串转换为数字时会产生 0

4: 1+"0" toPrimitive([])将为"0"

5: "10"

答案 1 :(得分:5)

JavaScript以这种方式评估+[] == 0

  1. + []+运算符尝试将操作数[]转换为原始值。
  2. + []:使用[]方法将toString()转换为字符串,该方法是[].join(',')的别名。结果是一个空字符串''
  3. + '':空字符串转换为数字:Number('') - > 0
  4. + 0变为0
  5. 最后评估比较:+[] == 0 - > 0 == 0 - > true
  6. '1+[+[]]'评估:

    1. 1 + [ +[] ](将[]转换为基元:''
    2. 1 + [ + '' ](将''转换为数字:0
    3. 1 + [ + 0 ]+ 00
    4. 1 + [ 0 ](加法运算符强制将[0]转换为原始值:[0].toString() - > [0].join(',') - > '0'
    5. 1 + '0'(因为第二个操作数'0'是一个字符串,所以将第一个数字1转换为字符串:'1'
    6. '1' + '0'(简单字符串连接)
    7. '10'
    8. 另请阅读有关添加运算符的this article