我正在尝试比较以下格式:
var u=new String('test');
var t=new String('test');
当我检查 (u==t) 或 (u===t)
时,它返回 false
。
同样地,如果我尝试执行
var u=new String();
var t=new String();
u='test';t='test';
现在,
(u==t) and (u===t)
返回 true
。我正在尝试比较以下格式:
var u=new String('test');
var t=new String('test');
当我检查 (u==t) 或 (u===t)
时,它返回 false
。
同样地,如果我尝试执行
var u=new String();
var t=new String();
u='test';t='test';
(u==t) and (u===t)
返回 true
。当使用==
比较两个对象(例如,使用new String()
创建的对象)时,背后会使用===
。这使得
u == t
等同于
u === t
由于它们是两个不同的对象,所以结果始终为false。
然而,当您使用字符串文字时,您正在创建原始数据,它们的比较是通过value
而不是引用来完成的。这就是为什么u==t
返回true
,如评论中所述。
第一个比较是使用String构造函数比较对象引用,而第二个例子中,您正在将u和t值重新初始化为字符串字面量。第一个比较实际上是比较引用,而第二个比较实际上是比较值。如果您想按值比较第一个示例,则可以像这样比较String对象的值。
u.valueOf() === t.valueOf();
new String
构造函数创建的是对象而不是字符串,因此当你比较它们时,它们不相等。var t = new String("testing");
typeof t;
// "object"
var u = "testing";
typeof u;
// "string"
t == u
// false
t.toString() == u.toString()
// true
他们会的。
基本上在第一种情况下,您正在创建对象。因此,与对象进行比较,使用===
,因此它始终返回false
。
在第二种情况下,您在前两行中使用空字符串执行相同的操作。
var u=new String();
var t=new String();
console.dir(u)
查看。u='test';t='test';
你用字符串基础值覆盖了 u、t 的值。所以它只是比较 test
的值。
String
构造函数创建的前两个是对象,在JS中无法直接比较对象。后两个先被创建为对象,然后被 String 覆盖,因此可以比较。 - Tusharnew String
实例,是通过它们的身份进行比较的,每个创建的new
实例都是不同的。因此,两个不同的对象永远不可能相等。原始类型,就像您在第二个示例中使用的那样(对象被替换而不是修改),是通过它们的值进行比较的。 - Jonathan Lonowski