我正在阅读一本专业的JavaScript书籍,并以indexOf为例让我感到困惑。请参阅下文。
var person = {name: "Ali"};
var people = [{name: "Ali"}];
var morePeople = [person];
alert(people.indexOf(person)); //returns -1
alert(morePeople.indexOf(people)); //returns 0
我想知道为什么第一个警报返回-1,因为人们包含名字Ali。我很困惑!
答案 0 :(得分:1)
对象的JavaScript相等性检查测试它们是否是相同的对象,而不是它们是相同的对象。
{name: "Ali"} != {name: "Ali"}
它包含名称Ali,但它不是同一个对象。
答案 1 :(得分:0)
如果对象引用相同的对象,则它们是相同的,而不是当它们恰好具有相同的属性和值,而是单独定义时。
这两个对象不一样:
a = { test: 1 };
b = { test: 1 };
// now a !== b
数组并不是真正重要的方面:people
和morePeople
都是数组。问题的核心是为什么作为这两个数组中每个数组的第一个元素的对象不是同一个对象。当原始值具有相同的值时,它们被认为是相同的:
a = 1
b = 1
// now a === b
a = 'test'
b = 'test'
// again a === b
但是对于对象来说通常不是这样,因为它们代表了引用。平等规则更复杂(例如,请参阅this Q&A),当您应用.indexOf()
时,它们会发挥作用。