如何对 Javascript 中的字符串进行真实身份相等性检查
How to do real identity equality check for string in Javascript
我看过很多关于javascript恒等运算符===
的解释,但似乎不像我们在其他语言如Java中对恒等的理解那样准确。
似乎是针对基本类型(例如数字、字符串),===
return true 表示两个变量是否具有相同的类型和值。但不一定是同一标识(对同一对象的引用)。但是对于数组和映射,它确实如此。以下是一些让我感到困惑的例子:
s1 = 'a' + '1'
s2 = 'a' + '1'
s1 === s2 // true, even they actually reference two different
objects in memory which suppose to be different identities.
a1 = [1,2]
a2 = [1,2]
a1 === a2 // false, as they reference two different objects in memory, even their values are the same.
有人可以确认我的理解是正确的吗? Java 脚本中是否还有对字符串的真实身份相等性检查。即在上面的例子中 s1 === s2
应该 return false
?
这是因为字符串是原始类型,而数组是对象类型。基元可以像您期望的那样进行比较,但是在比较对象时,您是在比较引用而不是对象本身。
s1 = new String('a1');
s2 = new String('a1');
s1 === s2 // false
Equality comparisons and sameness over on MDN
如果您不确定自己正在处理什么(像 number
或 string
或 object
这样的原语),typeof
可以解决
typeof new String() // object
typeof '' // string
感谢您的回答。我认为真相的来源是关于 Strict Equality Comparison. It clearly specifies the behavior in SameValueNonNumber(x, y) 的 Javascript 语言规范。令人困惑的是,许多文章误用了术语 Identity Equality 而不是 Strict Equality,没有 Identity Equality[=17] 这样的概念=] 基于规范。 (尽管它与 SameValueNonNumber(x, y)
中第 8 项中指定的对象类型的行为相似)。所以我相信答案不可能在 Javascript.
中进行字符串身份相等性检查
我看过很多关于javascript恒等运算符===
的解释,但似乎不像我们在其他语言如Java中对恒等的理解那样准确。
似乎是针对基本类型(例如数字、字符串),===
return true 表示两个变量是否具有相同的类型和值。但不一定是同一标识(对同一对象的引用)。但是对于数组和映射,它确实如此。以下是一些让我感到困惑的例子:
s1 = 'a' + '1'
s2 = 'a' + '1'
s1 === s2 // true, even they actually reference two different
objects in memory which suppose to be different identities.
a1 = [1,2]
a2 = [1,2]
a1 === a2 // false, as they reference two different objects in memory, even their values are the same.
有人可以确认我的理解是正确的吗? Java 脚本中是否还有对字符串的真实身份相等性检查。即在上面的例子中 s1 === s2
应该 return false
?
这是因为字符串是原始类型,而数组是对象类型。基元可以像您期望的那样进行比较,但是在比较对象时,您是在比较引用而不是对象本身。
s1 = new String('a1');
s2 = new String('a1');
s1 === s2 // false
Equality comparisons and sameness over on MDN
如果您不确定自己正在处理什么(像 number
或 string
或 object
这样的原语),typeof
可以解决
typeof new String() // object
typeof '' // string
感谢您的回答。我认为真相的来源是关于 Strict Equality Comparison. It clearly specifies the behavior in SameValueNonNumber(x, y) 的 Javascript 语言规范。令人困惑的是,许多文章误用了术语 Identity Equality 而不是 Strict Equality,没有 Identity Equality[=17] 这样的概念=] 基于规范。 (尽管它与 SameValueNonNumber(x, y)
中第 8 项中指定的对象类型的行为相似)。所以我相信答案不可能在 Javascript.