Javascript的字符串比较

时间:2015-12-22 05:22:04

标签: javascript javascript-objects

我想使用以下格式进行比较:

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

当我检查(u==t) or (u===t)时,它会返回false

同样如果我尝试

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

现在(u==t) and (u===t)会返回true

5 个答案:

答案 0 :(得分:4)

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

u == t 

相当于

u === t

由于它们是两个不同的对象,因此结果总是错误的。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

  

如果两个操作数都是对象,则JavaScript比较内部引用,当操作数引用内存中的同一对象时,它们是相等的。

答案 3 :(得分:1)

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

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

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

t == u
// false

但是,如果你比较他们的字符串值:

t.toString() == u.toString()
// true
他们会的。

答案 4 :(得分:1)

基本上在第一种情况下你创建对象。因此,与对象进行比较时,请执行===,以便它始终返回false

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

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

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

的值