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

这个问题在这里已经有了答案:

  • 为什么++ [[]] [+ []] + [+ []]返回字符串“10”? 8个答案

  • 它将被评估如下,

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

    Operator +优先级高于==因此它将首先被评估。 因此,在将数组转换为数字时, 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 ]+ 00
  • 1 + [ 0 ] (加法运算符将[0]的变换强制为原始值: [0].toString() - > [0].join(',') - > '0'
  • 1 + '0' (因为第二个操作数'0'是一个字符串,所以将第一个数字1转换为一个字符串: '1'
  • '1' + '0' (简单字符串连接)
  • '10'
  • 请阅读关于加法运算符的这篇文章。

    链接地址: http://www.djcxy.com/p/48045.html

    上一篇: Explain why '+[] == 0' output 'true' in Javascript?

    下一篇: JavaScript array to number