【问题标题】:Javascript switch with string variable not working带有字符串变量的Javascript开关不起作用
【发布时间】:2016-09-22 16:33:19
【问题描述】:

谁能告诉我为什么下面的开关不起作用?

var String=new String('String #1');

document.write(String);

document.write(' Check ');

switch(String)
{

    case 'String #1' : 
    document.write('String Number 1');
    break;
    default: document.write('wrong string');
}

输出为:String #1 检查错误的字符串

【问题讨论】:

  • 为什么将字符串命名为内置函数名?
  • ^ 那,你应该得到String is not a constructor 错误
  • a) 不要创建 String 实例 b) 不要覆盖 String c) 不要在 String 对象上覆盖 switch
  • 当我命名不同时,例如MyString,同样的事情仍然发生。
  • new String('String #1') !== 'String #1'。第一个是对象,第二个是原始值。是的,switch 使用严格的比较。

标签: javascript switch-statement case


【解决方案1】:

您必须将对象与对象进行比较,而不是将字符串与对象进行比较。在这里,我将一个对象与一个对象进行比较:

var string = "String #1";
console.log(string);
console.log("Check");

switch(string)
{
    case "String #1":
    console.log("String Number 1");
    break;
    default: console.log("wrong string");
}

【讨论】:

  • 更正“你在这里比较一个字符串和一个字符串”:)
【解决方案2】:

String 是 JavaScript 内置的构造函数。命名影响这些构造函数的变量将导致错误:

TypeError: String is not a constructor

重命名String 变量并且不要在此处使用switch 语句,因为您有一个String 实例。 switch 语句根据 MDN documentationECMAScript 2015 specification 使用严格比较 (===)。由于字符串实例和文字永远不会“严格相等”,因此比较失败。不要实例化,而是使用文字:

var string = "String #1";

switch(string) {
  case "String #1":
    document.write("String Number 1");
    break;
  default: 
    document.write("wrong string");
}

另外,我不建议使用document.write,请参阅here。使用 createElementappendChild 登录或插入 DOM 应该可以正常工作。

【讨论】:

  • 谢谢大家的建议,这行得通:如果你写了 var String = 'String #1';它应该没有问题。 – torazaburo 56 分钟前我也会检查其他选项。
【解决方案3】:

您可以使用toString() 将对象更改为字符串,参见示例https://jsfiddle.net/DIRTY_SMITH/59x9xn3g/1/

<script>
var someObject =new String('String #1');
var someString = someObject.toString();
document.write(someString);

document.write(' Check ');

switch(someString)
{

    case 'String #1' : document.write('String Number 1');
    break;
    default: document.write('wrong string');
}
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 2011-05-14
    相关资源
    最近更新 更多