【问题标题】:Does the switch statement equal to === or ==? [duplicate]switch 语句是否等于 === 或 ==? [复制]
【发布时间】:2014-10-01 16:49:24
【问题描述】:

Javascript switch 语句是严格比较还是类型转换?

【问题讨论】:

  • 它使用strict comparison (===)
  • 这肯定是微不足道的测试,switch ("1") { case 1: alert(1); break; } 做了什么?
  • 也许检查ES5:“如果 input 等于 === 运算符定义的 clauseSelector,那么……”。跨度>

标签: javascript comparison switch-statement


【解决方案1】:

我不敢相信问这个问题比尝试这个更快:

var v = "1";

switch (v) {
    case 1:
        alert ("No");
        break;
    default:
        alert ("Yes");
}

在回答您的问题时,它是===

【讨论】:

  • “只是尝试”的问题在于,在没有指定行为的情况下,您只是在测试特定的实现。在这种情况下,它看起来实际上是指定要使用严格的比较,但在另一种情况下,标准可能不那么清楚,甚至根本没有说什么,在这种情况下你可能会陷入困境如果您“只是测试”然后假设所有实现都是相似的,那就是一个漏洞。
  • @MichaelKjörling 当然,反过来也是如此 - 如果您检查了规范并看到比较是严格的,但您的环境不是,那么您可能会经历一段可怕的调试时间。
【解决方案2】:

它只使用严格的比较。特别是,即使没有找到严格匹配,它也永远不会回退到类型强制——如果有的话,它会立即跳到默认子句。来自MDN

程序首先查找case 子句,其表达式的计算结果与输入表达式的值相同(使用strict comparison===),然后将控制权转移到该子句,执行相关的语句。如果没有找到匹配的case 子句,程序会查找可选的default 子句...

【讨论】:

    【解决方案3】:

    根据MDN 它使用严格的比较。

    程序首先查找一个 case 子句,其表达式的计算结果与输入表达式的值相同(使用严格比较 ===),然后将控制权转移到该子句,执行相关的语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-09
      • 2012-07-13
      • 2013-09-01
      • 1970-01-01
      • 2015-10-17
      • 2015-09-04
      • 1970-01-01
      相关资源
      最近更新 更多