Javascript的字符串比较

Javascript's string comparison

我正在尝试使用以下格式进行比较:

var u=new String('test');
var t=new String('test');

当我检查 (u==t) or (u===t) 它 returns false.

同样,如果我尝试做

var u=new String();
var t=new String();
u='test';t='test';

现在(u==t) and (u===t)returnstrue.

当使用 == 比较 2 个对象(例如,使用 new String() 创建的对象)时,在幕后使用 ===。 这使得

u == t 

相当于

u === t

因为它们是 2 个不同的对象,所以结果总是错误的。

但是,当您使用字符串文字时,您正在创建原始数据,它们的比较是由 value 而不是引用完成的。这就是评论中提到的 u==t returns true 的原因。

第一个比较是使用 String 构造函数比较对象引用,第二个示例是将 u 和 t 值重新初始化为 String 文字。第一个实际上是比较引用,而第二个实际上是比较值。如果您想按值比较第一个示例,您可以像这样比较 String 对象的值。

u.valueOf() === t.valueOf();

您正在使用 new String() 创建新对象并引用了 MDN 的 Comparison operators

If both operands are objects, then JavaScript compares internal references which are equal when operands refer to the same object in memory.

使用 new String 构造函数时,您创建的是对象而不是字符串。所以当你比较它们时,它们并不相等。

var t = new String("testing");
typeof t;
// "object"

var u = "testing";
typeof u;
// "string"

t == u
// false

但是,如果您比较它们的字符串值:

t.toString() == u.toString()
// true

他们会的。

基本上在第一种情况下你创建对象。所以比较对象做一个 === 所以它总是 return false

在第二种情况下,你在前两行用空字符串做同样的事情。

var u=new String();
var t=new String();

console.dir(u)看看。
但在底线 u='test';t='test'; 你用字符串原始值覆盖 u,t 值。所以它只是比较 test

的值