书籍

时间:2016-02-02 21:46:12

标签: javascript

我有以下代码:

var person = { name: "Nicholas" };
var people = [{ name: "Nicholas" }];
var morePeople = [person];

alert(people.indexOf(person)); //-1
alert(morePeople.indexOf(person)); //0

我无法弄清楚为什么当人们是一个数组且包含{ name: "Nicholas" }时,第一个警报会给出-1(未找到)

1 个答案:

答案 0 :(得分:4)

因为虽然两个对象包含相同的信息,但它们不是同一个对象。例如:

var nick = { name: 'Nick' };
var nick2 = { name: 'Nick' };
console.log(nick === nick2); // false
console.log(nick === nick); // true

这是正确的,因为Javascript不会在对象之间进行每个属性的比较以确定相等性。它只检查“这是否与另一个完全相同的对象?”如果,只有当这是真的时,你会在比较两个对象时获得真实的结果。

.indexOf使用此类比较来确定数组中是否有任何对象或值。