Неочевидная работа операторов сравнения(для меня)
Сразу извеняюсь, скорее всего здесь что то очевидное, но я не могу понять уже как два часа отряду.
Есть код 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, так как массивы разные а они сравниваются по ссылке, но этого не происходит. А почему понять не могу. Объясните пожалуйста где у меня закоротило в мозгу=) |
1. Форматируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. 2. А Вы посмотрите, что на самом деле сравнивается внутри этих функций. |
Вы ничего не передаете в функции, а это равносильно тому, что аргументы arr1 и arr2 функций равны undefined, а значит и друг другу
|
Сравнивание при помощи операторов сравнения будет валидно только для примитивных типов - undefined, null, Boolean, Number, String. Объекты любых других типов являются ссылками, то бишь [1, 2, 3] != [1, 2, 3], потому как это будут две разные ссылки.
|
Спасибо, всем, теперь понял ;) Должно быть так
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 ) |
А разве они так могут проверятся? В 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 |
Вы правы, у меня изначально была именно такая цель, потом вспомнил что массивы передаются по ссылке, наваял код чтобы убедится( потом и к фленагану залез) ,но он не работал, собственно полез на форум за разъяснениями и выяснил причину. А так да чтобы проверить наличие одинаковых элементов другого способа как перебирать элементы массива и сравнивать, я не вижу =(
|
Часовой пояс GMT +3, время: 11:41. |