为啥数组使用'==='运算符来比较元素?

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 === cfalse,但b[0...2] === c[0...2]true @akashivskyy 更多:现在试试c.unshare() - 数组现在是==,但切片不是 @akashivskyy 更奇怪的是,切片不是==,而是由它们组成的数组(例如Array(b[0...2]))是==

以上是关于为啥数组使用'==='运算符来比较元素?的主要内容,如果未能解决你的问题,请参考以下文章

为啥扩展元素不适合复制多维数组?

在对象数组上使用扩展运算符来访问元素[重复]

matlab学习3

c++ 使用动态分配运算符反转数组元素

在 nlog(n) 时间内对整数数组进行排序而不使用比较运算符

关于如何去除数组中重复项