javascript - Array.prototype.includes 函数如何比较对象

标签 javascript arrays javascript-objects

在 ECMA 规范中,我们读到 Array.prototype.includes 用途 SameValueZero比较数组是否包含给定元素时的算法。
这个算法,当元素是一个Object时,它使用SameValueNonNumeric算法基本上检查比较元素的类型是否匹配,最后,在算法的最后一点,它检查:

If x and y are the same Object value, return true. Otherwise, return false.



我的问题 :

怎么样SameValueNonNumeric算法执行对象比较步骤?它如何确定“x 和 y 是相同的对象值”?我在规范中找不到这个。

来自 thisthis问题似乎在 JS 中对象比较不是那么简单。

最佳答案

Array.prototype.includes不应该为您提供正确的对象检查结果,而是设计用于 bool 值、字符串和数字值

对于一个对象,它基本上只是做一个引用检查,所以如果该对象包含与数组中的引用相同的引用,它返回 true 否则只会返回 false 而不管对象中的值

var arr = [{x: 1, y: 2}, {x: 2, y: 'as'}, {x: 'in', y: 'po'}];
console.log(arr.includes({x: 2, y: 'as'}));
console.log(arr.includes(arr[1]));


对于对象存在检查,您需要使用 Array.prototype.find并检查对象的所有值

关于javascript - Array.prototype.includes 函数如何比较对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61203925/

相关文章:

javascript - 使用 DT 进行列格式化的单个/多个条件

javascript - 如何获取对象的长度

java - 与字符串数组关联的数组中的最小数字

javascript - 通过参数获取/查找 javascript 对象

Javascript - 创建没有引用的对象

javascript - 从 HTML 表单向 Node.js 服务器发送数据

javascript - 在显示谷歌地图时隐藏 UiWebview 的地址栏

javascript - 如何强制 Firebug 按照声明顺序打印 JSON 属性?

python - 将数组写入文本文件,每行中具有最大元素数量

javascript - 输入 {a :1} giving 1, 和 {a :1, b :2} giving an error in a Javascript console? 的行为是什么