字符串相同如何在JavaScript中工作?

Soo*_*ead 13 javascript string operators

有很多教程==,===所以请不要指导我学习基础教程,我的问题更具体:

例如,http://www.w3schools.com/jsref/jsref_obj_string.asp声明:

句法:

var txt = new String("string");

// or more simply:
var txt = "string";
Run Code Online (Sandbox Code Playgroud)

很好,但是这个呢?

alert(new String("a") == new String("a")); // false
alert("a" == "a"); // true

var a = new String("a");
var b = new String("a");
alert(a == b); // false

var c = "a";
var d = "a";
alert(c == d); // true

alert(c === d); // true
alert (a === c); // false
Run Code Online (Sandbox Code Playgroud)

当然,new String()无论如何都没有人打电话,但它是否因为平等失败而new String()被处理为一个对象而不是一个字符串?

当然,W3Schools并不是最值得信赖的来源,但我希望所有上述提醒都能说出来.

请解释.

sku*_*uro 12

"令人惊讶的结果"来自Javascript处理对象的相等性,以及字符串文字和String对象之间出现的混淆.从Mozilla的参考指南==操作:

如果两个操作数的类型不同,则JavaScript转换操作数,然后应用严格比较.如果操作数是数字或布尔值,操作数将尽可能转换为数字; 否则,如果任一操作数是字符串,则另一个操作数将转换为字符串(如果可能).如果两个操作数都是对象,则JavaScript比较内部引用,当操作数引用内存中的同一对象时,这些内部引用相等.

您可以使用数字体验相同的行为:

new Number(5) == new Number(5) // false
Run Code Online (Sandbox Code Playgroud)

并通过以下方式澄清您的想法:

typeof "string" // string
typeof new String("string") // object
Run Code Online (Sandbox Code Playgroud)


Bol*_*ock 5

字符串文字是原始值类型,与新对象不同String,新对象是具有包装这些值的不同引用的实体。有关详细信息,请参阅Mozilla JavaScript 文档中的预定义核心对象。

所以你是对的,对于文字和对象来说,比较的处理方式是不同的,仅仅是因为一个比较它们的值,而另一个比较引用。