我想使用以下格式进行比较:
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
。
答案 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