Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.01.2012, 01:35
Аспирант
Отправить личное сообщение для Sundro Посмотреть профиль Найти все сообщения от Sundro
 
Регистрация: 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, так как массивы разные а они сравниваются по ссылке, но этого не происходит. А почему понять не могу. Объясните пожалуйста где у меня закоротило в мозгу=)
Ответить с цитированием
  #2 (permalink)  
Старый 17.01.2012, 02:04
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

1. Форматируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

2. А Вы посмотрите, что на самом деле сравнивается внутри этих функций.
Ответить с цитированием
  #3 (permalink)  
Старый 17.01.2012, 02:20
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Вы ничего не передаете в функции, а это равносильно тому, что аргументы arr1 и arr2 функций равны undefined, а значит и друг другу
Ответить с цитированием
  #4 (permalink)  
Старый 17.01.2012, 04:41
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

Сравнивание при помощи операторов сравнения будет валидно только для примитивных типов - undefined, null, Boolean, Number, String. Объекты любых других типов являются ссылками, то бишь [1, 2, 3] != [1, 2, 3], потому как это будут две разные ссылки.
Ответить с цитированием
  #5 (permalink)  
Старый 17.01.2012, 12:27
Аспирант
Отправить личное сообщение для Sundro Посмотреть профиль Найти все сообщения от Sundro
 
Регистрация: 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.
Ответить с цитированием
  #6 (permalink)  
Старый 17.01.2012, 17:08
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 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
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #7 (permalink)  
Старый 17.01.2012, 17:21
Аспирант
Отправить личное сообщение для Sundro Посмотреть профиль Найти все сообщения от Sundro
 
Регистрация: 25.05.2011
Сообщений: 46

Вы правы, у меня изначально была именно такая цель, потом вспомнил что массивы передаются по ссылке, наваял код чтобы убедится( потом и к фленагану залез) ,но он не работал, собственно полез на форум за разъяснениями и выяснил причину. А так да чтобы проверить наличие одинаковых элементов другого способа как перебирать элементы массива и сравнивать, я не вижу =(

Последний раз редактировалось Sundro, 17.01.2012 в 17:23. Причина: обшибки
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск