#javascript #arrays #equality
#javascript #массивы #равенство
Вопрос:
Меня смущает сравнение javascript. допустим :
var array1 = [1,2,3];
var array2 = [1,2,3];
array1 == array2 ;
false // why false ?
array1 === array2;
false // also why false?
Кто-нибудь может мне это внятно объяснить? Заранее благодарю вас.
Ответ №1:
«Объекты, массивы и функции сравниваются по ссылке».
— JavaScript О’Рейли: окончательное руководство
В вашем случае array1
это ссылка на массив, отличный от array2
.
Ответ №2:
Они являются ложными, потому что вы сравниваете два разных экземпляра массива. Это будет верно только в том случае, если они на самом деле являются ссылками на один и тот же экземпляр.
var array1 = [1,2,3];
var array2 = array1;
array1 == array2 ; // true
Чтобы сравнить их содержимое, вам нужно сравнить каждый элемент по отдельности. Что-то вроде этого, хотя это не выглядит глубже, чем один уровень.
var array1 = [1,2,3];
var array2 = [1,2,3];
function compareArrays(a1,a2) {
var len = a1.length;
if( len !== a2.length )
return false;
while( len-- ) {
if( a1[ len ] !== a2[ len ] ) {
return false;
}
}
return true;
}
compareArrays( array1, array2 ); // true