17.01.2012, 01:35
|
Аспирант
|
|
Регистрация: 25.05.2011
Сообщений: 46
|
|
Неочевидная работа операторов сравнения(для меня)
Сразу извеняюсь, скорее всего здесь что то очевидное, но я не могу понять уже как два часа отряду.
Есть код
var arr1 = [1,2,3];
var arr2 = [1,2,0,4];
var a = function (arr1,arr2){
if ( (arr1 == arr2)){
return true;
}
return false;
}();
var b = function (arr1,arr2){
if ( arr1 === arr2){
return true;
}
return false;
}() ;
alert( "Проверка на равенство двух разных массивов "+ a + "Проверка на идентичность двух разных массивов " + b )
По идее код должен выдавать что для первого случая что для второго false, так как массивы разные а они сравниваются по ссылке, но этого не происходит. А почему понять не могу. Объясните пожалуйста где у меня закоротило в мозгу=)
|
|
17.01.2012, 02:04
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
1. Форматируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]
О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
2. А Вы посмотрите, что на самом деле сравнивается внутри этих функций.
|
|
17.01.2012, 02:20
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Вы ничего не передаете в функции, а это равносильно тому, что аргументы arr1 и arr2 функций равны undefined, а значит и друг другу
|
|
17.01.2012, 04:41
|
|
Профессор
|
|
Регистрация: 15.02.2011
Сообщений: 471
|
|
Сравнивание при помощи операторов сравнения будет валидно только для примитивных типов - undefined, null, Boolean, Number, String. Объекты любых других типов являются ссылками, то бишь [1, 2, 3] != [1, 2, 3], потому как это будут две разные ссылки.
|
|
17.01.2012, 12:27
|
Аспирант
|
|
Регистрация: 25.05.2011
Сообщений: 46
|
|
Спасибо, всем, теперь понял Должно быть так
var arr1 = [1,2,3];
var arr2 = [1,2,0,4];
var a = function (arr1,arr2){
if ( (arr1 == arr2)){
return true;
}
return false;
}(arr1,arr2);
var b = function (arr1,arr2){
if ( arr1 === arr2){
return true;
}
return false;
}(arr1,arr2) ;
alert( "Проверка на равенство двух разных массивов "+ a + "Проверка на идентичность двух разных массивов " + b )
Последний раз редактировалось Sundro, 17.01.2012 в 12:33.
|
|
17.01.2012, 17:08
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
А разве они так могут проверятся? В js массивы (объекты) передаются по ссылке, т.е., если две переменные ссылаются на один и от же массив, то они равны и идентичны. Если Вы хотите проверить наличие одинаковых элементов, то это уже другой разговор.
var x = [1, 2];
var z = x;
alert(x === z); // true
alert(x == z); // true
var z = [1, 2];
alert(x === z); // false
alert(x == z); // false
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
17.01.2012, 17:21
|
Аспирант
|
|
Регистрация: 25.05.2011
Сообщений: 46
|
|
Вы правы, у меня изначально была именно такая цель, потом вспомнил что массивы передаются по ссылке, наваял код чтобы убедится( потом и к фленагану залез) ,но он не работал, собственно полез на форум за разъяснениями и выяснил причину. А так да чтобы проверить наличие одинаковых элементов другого способа как перебирать элементы массива и сравнивать, я не вижу =(
Последний раз редактировалось Sundro, 17.01.2012 в 17:23.
Причина: обшибки
|
|
|
|