为啥数组使用'==='运算符来比较元素?
Posted
技术标签:
【中文标题】为啥数组使用\'===\'运算符来比较元素?【英文标题】:Why does the array use the '===' operator to compare elements?为什么数组使用'==='运算符来比较元素? 【发布时间】:2014-06-04 20:03:09 【问题描述】:来自documentation关于数组:
通过将它们与恒等运算符(=== 和 !==)进行比较来检查两个数组或子数组是否共享相同的存储和元素
但是,要检查两个数组是否包含相同的元素,您不会使用比较运算符 ==
(因为您正在比较数组的值)而不是标识 ===
(它将检查是否你指的是同一个数组)?
假设我正确理解运算符,这种行为是由数组作为struct
的实现引起的吗?
【问题讨论】:
【参考方案1】:这里的关键词是“存储”——这意味着它们是同一个“对象”,这确实是身份。
而且这个检查是必要的,因为数组是通过引用而不是值来复制的,所以如果你不小心,你可能会落入改变“另一个”数组的陷阱——这就是本指南的这一部分。
【讨论】:
其实@Timidger 有道理。 === 当我们有不同的引用时,应该返回 false 以保持一致 有趣的部分:var a = [1,2,3], b = a, c = a;
那么b === c
是false,但b[0...2] === c[0...2]
是true。
@akashivskyy 更多:现在试试c.unshare()
- 数组现在是==
,但切片不是
@akashivskyy 更奇怪的是,切片不是==
,而是由它们组成的数组(例如Array(b[0...2])
)是==
以上是关于为啥数组使用'==='运算符来比较元素?的主要内容,如果未能解决你的问题,请参考以下文章