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

me_*_*jay 6 javascript casting if-statement

这一小部分代码花了很长时间才被注意到.

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

if('true' == true) {
    alert("Does not happen");
}
Run Code Online (Sandbox Code Playgroud)

但它没有通过if条件.

我认为double等于==匹配值而不是类型匹配类型是作业===.

现在我的问题是为什么不检查true类型'true'或为什么检查这些操作数的类型?

geo*_*org 8

'true' == true
Run Code Online (Sandbox Code Playgroud)

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

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

'true' == 1
Run Code Online (Sandbox Code Playgroud)

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

Number('true') == 1
Run Code Online (Sandbox Code Playgroud)

- Number('true')NaN:

NaN == 1
Run Code Online (Sandbox Code Playgroud)

- 返回false(规则1.ci)

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

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

  • 到目前为止最好(也是最简单)的解释! (2认同)