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
的值
我正在尝试使用以下格式进行比较:
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