2016-02-02 130 views
1

我有以下代碼:JS代碼片段

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

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

我想不通,爲什麼第一個警報給出-1(未找到)當人們是一個數組,包含{ name: "Nicholas" }

+4

因爲兩個不同的對象*「實例」*永遠不會彼此相等。 –

+2

您創建了兩個不同的對象。它們恰好分享相同的字符串值,但它們本身並不相同。 –

+0

http://stackoverflow.com/questions/1068834/object-comparison-in-javascript –

回答

4

因爲雖然兩個對象包含相同的信息,但它們不是同一個對象。例如:

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

這是真的,因爲Javascript不會在對象之間進行每個屬性的比較以確定相等性。它只會檢查「這是否與另一個完全相同?」如果並且只有在這種情況是真的,才能在比較兩個對象時獲得真實結果。

.indexOf使用這種比較來確定任何對象或值是否在數組中。