首页 > 解决方案 > 如何在Javascript中对字符串进行真实身份相等性检查

问题描述

我看过很多关于 identity equal operator的解释===,但似乎它们并不像我们对其他语言(如 Java)中身份相等的理解那样准确。

似乎对于基本类型(例如数字、字符串),===返回 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.

有人可以确认我的理解是正确的吗?Javascript中的字符串也有真正的身份相等性检查。即s1 === s2应该false在上面的例子中返回?

标签: javascriptequalsreferenceequals

解决方案


感谢您的回答。我认为真相的来源是关于Strict Equality Comparison的 Javascript 语言规范。它清楚地指定了SameValueNonNumber(x, y)中的行为。令人困惑的是,许多文章误用了Identity Equality一词而不是Strict Equality ,基于规范没有这样的Identity Equality概念。(尽管它与第 8 项中指定的 Object 类型的行为相似SameValueNonNumber(x, y))。所以我相信答案是不可能在 Javascript 中进行字符串身份相等检查。


推荐阅读