Javascript Сравнительное выражение - PullRequest
2 голосов
/ 18 ноября 2010

Я смущен сравнением JavaScript.скажем:

var array1 = [1,2,3];
var array2 = [1,2,3];

array1 == array2 ; 
false // why false ? 

array1 === array2;
false // also why false?

Может кто-нибудь объяснить это мне ясно?Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 18 ноября 2010

"Объекты, массивы и функции сравнено по ссылке. "

- JavaScript О'Рейли: Полное руководство

В вашем случае array1 - это ссылка на массив, отличный от array2.

См. Здесь для сравнения массивов.

4 голосов
/ 18 ноября 2010

Они ложные, потому что вы сравниваете два разных экземпляра Array. Это будет верно только в том случае, если они действительно являются ссылками на тот же экземпляр.

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
...