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

IT技术 javascript types comparison type-conversion switch-statement
2021-01-24 20:47:21

我有一个可以是 booleanfalse或整数(包括 0)的变量我想把它放在一个 switch 语句中,如:

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

在我在 Google Chrome 中的测试中,它似乎工作得很好,但我使用它有点紧张,因为我担心在某些浏览器中,如果my_varfalse,它可能会执行自0 == false.

我只是想知道 JavaScript 中是否有任何官方声明 switch 语句将使用严格比较0 !== false,但我自己找不到任何东西,我不确定这是否会在不同的 JavaScript 引擎中运行良好。有人知道 switch 语句所做的比较是否保证严格?

3个回答

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

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

然后……什么?我不知道你为什么在这里切断引用。
2021-03-18 20:47:21
该部分看起来像一堆乱码;其他答案更有帮助。我想知道为什么像这样难以理解的事情会得到这么多的赞成。
2021-03-29 20:47:21
自 1999 年以来一直是这样聚会(第 68 页,第 12.11 节,CaseBlock #3)
2021-04-07 20:47:21

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

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

jsfiddle.net/to469fLm/4,你可以概括强制功能来实现你的需求
2021-03-26 20:47:21

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

来源:switch - JavaScript | MDN