在JavaScript switch语句中假设严格比较是否安全?

Pau*_*aul 99 javascript comparison types type-conversion switch-statement

我有一个变量,可以是布尔值false,也可以是整数(包括0).我想把它放在一个switch语句中:

switch(my_var){
    case 0:
         // Do something
         break;
    case 1:
         // Do something else
         break;
    case false:
         // Some other code
}
Run Code Online (Sandbox Code Playgroud)

在谷歌浏览器的测试中,它似乎工作得很好,但我使用它有点紧张,因为我害怕在某些浏览器中,如果my_varfalse,它可能会执行第一种情况0 == false.

我只是想知道JavaScript中是否有任何官方说切换语句将使用严格的比较0 !== false,但我自己找不到任何东西,而且我不确定这是否适用于不同的JavaScript引擎.有人知道switch语句完成的比较是否保证是严格的吗?

Fed*_*rón 96

看看ECMA 262,第12.11节,第二个算法,4.c.

C.如果输入等于===运算符定义的clauseSelector,则...

  • 自1999年以来一直是[像这样的聚会](http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf)(page 68,s.12.11,CaseBlock#3) (7认同)
  • 然后……什么?我不知道你为什么在这里截断引用。 (2认同)
  • 该部分看起来像是一堆乱码;其他答案更有帮助。我想知道为什么像这样难以理解的事情会得到如此多的支持。 (2认同)

Hal*_*yon 33

http://qfox.nl/notes/110回答你的问题.(这家伙知道很多关于JavaScript的细节)

Javascript中的开关使用严格类型检查(===).所以你永远不必担心强制,这可以防止一些wtfjs :).另一方面,如果你指望强制,运气不好,因为你不能强迫它.


ma1*_*w28 10

是的,switch“[使用]严格比较===”。

来源:switch - JavaScript | MDN