我有以下代码:
var person = { name: "Nicholas" };
var people = [{ name: "Nicholas" }];
var morePeople = [person];
alert(people.indexOf(person)); //-1
alert(morePeople.indexOf(person)); //0
我无法弄清楚为什么当人们是一个数组且包含{ name: "Nicholas" }
时,第一个警报会给出-1(未找到)
答案 0 :(得分:4)
因为虽然两个对象包含相同的信息,但它们不是同一个对象。例如:
var nick = { name: 'Nick' };
var nick2 = { name: 'Nick' };
console.log(nick === nick2); // false
console.log(nick === nick); // true
这是正确的,因为Javascript不会在对象之间进行每个属性的比较以确定相等性。它只检查“这是否与另一个完全相同的对象?”如果,只有当这是真的时,你会在比较两个对象时获得真实的结果。
.indexOf
使用此类比较来确定数组中是否有任何对象或值。