javascript - 如何在Javascript中对字符串进行真实身份相等性检查
问题描述
我看过很多关于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
在上面的例子中返回?
解决方案
感谢您的回答。我认为真相的来源是关于Strict Equality Comparison的 Javascript 语言规范。它清楚地指定了SameValueNonNumber(x, y)中的行为。令人困惑的是,许多文章误用了Identity Equality一词而不是Strict Equality ,基于规范没有这样的Identity Equality概念。(尽管它与第 8 项中指定的 Object 类型的行为相似SameValueNonNumber(x, y)
)。所以我相信答案是不可能在 Javascript 中进行字符串身份相等检查。
推荐阅读
- struct - 如何在具有生命周期的结构上实现标记特征?
- r - 使用 R 中的 readLines 解析数据前的最后一个注释行
- typescript - 如何检查 Typescript Set 数据结构中的列表相等性?
- lua - '
'预计接近'结束' - android - 在某些三星 Android 设备上未找到处理意图 OPEN_DOCUMENT_TREE 的活动
- android - 找不到生命周期:common-java8 库
- javascript - 当我使用 react-native 时没有调用 passport.deserializeUser
- python - 组合两个数据框的行
- flutter - Flutter 动态改变视频源
- android - uiautomator在mac中不可点击