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

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

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

在我在Google Chrome中的测试中,它似乎可以完美地工作,但是我有点紧张使用它,因为我担心在某些浏览器中,如果是,它可能会执行自.my_varfalse0 == false

我只是想知道JavaScript中是否有任何官方说法,即switch语句将使用严格的比较,但是我自己找不到任何东西,我不确定这是否能在不同的JavaScript引擎中很好地工作。有谁知道switch语句所做的比较是否保证是严格的?0 !== false


答案 1

请看 ECMA 262,第 12.11 节,第二种算法,4.c。

c. 如果输入等于 === 运算符定义的子句选择器,则...


答案 2

http://qfox.nl/notes/110 回答您的问题。(这个家伙对JavaScript的细节了解很多)

Javascript 中的开关使用严格的类型检查 (===)。因此,您永远不必担心胁迫,这会阻止一些wtfjs:)。另一方面,如果你指望胁迫,那么运气不好,因为你不能强迫它。