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

Posted

技术标签:

【中文标题】在 JavaScript switch 语句中假设严格比较是不是安全?【英文标题】:Is it safe to assume strict comparison in a JavaScript switch statement?在 JavaScript switch 语句中假设严格比较是否安全? 【发布时间】:2011-10-22 19:48:28 【问题描述】:

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

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

在我在谷歌浏览器中的测试中,它似乎运行良好,但我使用它有点紧张,因为我担心在某些浏览器中,如果my_varfalse,它可能会执行第一个案例自0 == false.

我只是想知道 javascript 中是否有任何官方说明 switch 语句将使用严格比较,例如 0 !== false,但我自己找不到任何东西,我不确定这是否能正常工作在不同的 JavaScript 引擎中。有人知道 switch 语句进行的比较是否保证是严格的吗?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

一直是 partying like that since 1999(第 68 页,第 12.11 节,CaseBlock #3) 那么……什么?我不知道你为什么在这里切断报价。 那部分看起来像一堆乱码;其他答案更有帮助。我想知道为什么像这样难以理解的事情会得到如此多的支持。【参考方案2】:

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

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

【讨论】:

jsfiddle.net/to469fLm/4 ,你可以泛化强制函数来实现你的需求【参考方案3】:

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

来源:switch - JavaScript | MDN

【讨论】:

以上是关于在 JavaScript switch 语句中假设严格比较是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

js教程系列10:JavaScript的Switch语句

[JavaWeb-JavaScript]JavaScript流程控制语句

4.1 Javascript:决策-switch/case语句

JavaScript Switch语句 - 单个案例中的同义词

JavaScript-Runoob:JavaScript switch 语句

JavaScript中字符串匹配的switch语句