在 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_var
是false
,它可能会执行第一个案例自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 语句中假设严格比较是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章
[JavaWeb-JavaScript]JavaScript流程控制语句
4.1 Javascript:决策-switch/case语句
JavaScript Switch语句 - 单个案例中的同义词