谁能告诉我为什么下面的开关不工作?
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检查错误的字符串
发布于 2016-09-22 16:42:19
您必须将对象与对象进行比较,而不是将字符串与对象进行比较。这里我将一个对象与一个对象进行比较:
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");
}
发布于 2016-09-22 16:36:49
String是一个内置到JavaScript中的构造函数。命名隐藏这些构造函数的变量将导致错误:
TypeError: String is not a constructor
重命名String
变量,不要在这里使用switch
语句,因为您有一个String实例。switch
语句对每个MDN documentation和ECMAScript 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。在这里,使用createElement
和appendChild
记录或插入到DOM中应该足够了。
发布于 2016-09-22 16:45:54
您可以使用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>
https://stackoverflow.com/questions/39644393
复制相似问题