Выражение сравнения Javascript

#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