在 ECMA 规范中,我们读到Array.prototype.includes https://tc39.es/ecma262/#sec-array.prototype.includes uses 相同值零 https://tc39.es/ecma262/#sec-samevaluezero比较数组是否包含给定元素时的算法。
这个算法,当元素是一个Object时,它使用相同值非数字 https://tc39.es/ecma262/#sec-samevaluenonnumeric算法基本上检查比较元素的类型是否匹配,最后,在算法的最后一点,它检查:
如果 x 和 y 是相同的对象值,则返回 true。否则,返回 false。
我的问题 :
如何SameValueNonNumeric
算法执行对象比较步骤?它如何确定“x 和 y 是相同的对象值”?我在规格中找不到这个。
From this https://stackoverflow.com/questions/1068834/object-comparison-in-javascript and this https://stackoverflow.com/questions/201183/how-to-determine-equality-for-two-javascript-objects问题似乎在JS中对象比较不是那么简单。
Array.prototype.includes
不应该为您提供正确的对象检查结果,而是设计用于布尔值、字符串和数字值
对于一个对象,它基本上只是进行引用检查,因此如果该对象包含与数组中的引用相同的引用,它将返回 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
并检查对象的所有值
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)