为什么在JavaScript中使用double等号'=='的真正匹配'true'?

时间:2014-01-10 10:17:42

标签: javascript if-statement casting

这段代码花了很长时间才被注意到。

我想如果我做了以下,那就没问题了

if('true' == true) {
    alert("Does not happen");
}

但它没有通过if条件。

我认为双等于==匹配的值不是类型,因为匹配类型是===的作业。

现在我的问题是为什么不true'true'进行类型转换,或者为什么要检查这些操作数的类型?

4 个答案:

答案 0 :(得分:8)

'true' == true

这就是这里发生的事情(根据rules):

- 将布尔值转换为数字(规则7):

'true' == 1

- 将'true'转换为Number(规则5):

Number('true') == 1

- Number('true')NaN

NaN == 1

- 返回false(规则1.c.i)

==确实令人困惑,但一旦理解了规则,它就会有所帮助:

  • 垃圾等于垃圾(undefined == null)
  • 没有布尔(他们被比作数字)
  • 如果其中一个部分是数字,则比较数字
  • 如果其中一个部分是字符串,则比较为字符串
  • 否则,a和b必须是同一个东西。

答案 1 :(得分:4)

Javascript的==是在没有可理解逻辑的情况下构建的语言中最糟糕的部分之一......我们遇到了旧的规范,这只是答案。

在完整的Facepalm上获取战利品:

https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Sameness

修改编辑

是的,'类型转换'无法正常工作......没有其他答案......:/

答案 2 :(得分:4)

请参阅rules for ==

Type(x)是一个字符串,Type(y)是一个布尔值。所以第7步适用。它将布尔值转换为数字并将其与字符串进行比较。您赢得的字符串不匹配任何数字。

答案 3 :(得分:1)

JavaScript中的

布尔值,如果参数为真,则结果为1。如果参数为false,则结果为+0。因此,'true' == true相当于'true' == 1,这当然是假的。