样例代码:
const a = {val: 1};
const b = {val: 2};
const list = [a, b];
console.info(list.includes(a)); // true
console.info(list.includes({val: 1})); // false
问题:
TL; TR
list.some(value => JSON.stringify(value) === JSON.stringify({val: 1}));
答案:
首先,变量a是对象的引用链接。如果使用list.includes(a)
它进行检查,则返回true,因为它找到了到先前声明的对象的链接const a = {val: 1};
。
其次,list.includes({val: 1})
返回false
,因为您正在尝试搜索对新创建的对象-的引用{val: 1}
。对象可能包含相同的值,并且结构相同,但是它们作为完全不同的对象存储在内存中。
如果要按结构检查同一对象,请Array.prototype.some()
为您的情况和逻辑使用并编写比较器功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句