【问题标题】:Is it safe to assume strict comparison in a JavaScript switch statement?在 JavaScript switch 语句中假设严格比较是否安全?
【发布时间】:2023-04-05 21:05:01
【问题描述】:

我有一个变量,它可以是布尔值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 语句进行的比较是否保证是严格的吗?

【问题讨论】:

    标签: javascript types comparison type-conversion switch-statement


    【解决方案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 :)。如果在 另一方面,你指望强制,运气不好,因为你不能 强迫它。

    【讨论】:

    【解决方案3】:

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

    来源:switch - JavaScript | MDN

    【讨论】:

      猜你喜欢
      • 2016-08-09
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 2012-09-04
      • 2016-12-13
      • 1970-01-01
      相关资源
      最近更新 更多