在 ECMA 规范中,我们读到 Array.prototype.includes
用途 SameValueZero比较数组是否包含给定元素时的算法。
这个算法,当元素是一个Object时,它使用SameValueNonNumeric算法基本上检查比较元素的类型是否匹配,最后,在算法的最后一点,它检查:
If x and y are the same Object value, return true. Otherwise, return false.
我的问题 :
怎么样
SameValueNonNumeric
算法执行对象比较步骤?它如何确定“x 和 y 是相同的对象值”?我在规范中找不到这个。来自 this和 this问题似乎在 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/