带有字符串变量的Javascript开关不起作用

问题描述 投票:0回答:4

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

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 检查错误字符串

javascript switch-statement case
4个回答
4
投票

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

TypeError: String is not a constructor

重命名

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

var string = "String #1";

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

另外,我不建议使用

document.write
,请参阅这里。使用
createElement
appendChild
记录或插入到 DOM 中应该足够了。


3
投票

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

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
投票

您可以使用

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>

0
投票

另一个简单的解决方案是将原始字符串和字符串对象连接起来。结果是一个原始字符串,可以在 switch 语句中使用。

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');
}
© www.soinside.com 2019 - 2024. All rights reserved.