为什么alert(!!"0")和alert(false =="0")都在JavaScript中输出true

Sti*_*gar 10 javascript

据我所知,在JavaScript!应该规范化一个布尔值,将其从某个其他类型转换为true或false.这意味着"0"转换为布尔值true.另一方面,如果我将它与false进行比较,事实证明它实际上是假的(因为比较的结果是真的).我在这里错过了什么规则.我在IE和Opera中测试了它.

SLa*_*aks 10

==运营商检查松动的平等,它有无关感实性.

具体来说,它会将操作数转换为数字,然后比较数字.
包含数字的字符串会转换为它们包含的数字; 布尔值转换为01.如果已定义,则
通过调用来转换对象valueOf.

因此,以下所有都是如此:

  • "1" == 1
  • "0" == false
  • "1" == true
  • "2" != true
  • "2" != false
  • ({ valueOf:function() { return 2; } }) == 2
  • ({ valueOf:function() { return 1; } }) == true

  • 确实,或者总的来说,"这个狗屎是怪人" (3认同)

Jon*_*ust 9

在第一种情况下,非空字符串等效于true.

在第二种情况下,因为一个操作数是布尔值,所以两个操作数都转换为数值.我相信false转换为数值0,字符串"0"也会转换为数字0,结果0 == 0是真的.

查看Mozilla参考操作员行为.