JackShcherbakov
@JackShcherbakov

Почему не равны массивы?

Приношу извенения за засорение форума элементарным и отчасти глупым вопросом.
Вообщем наткнулся на такую задачку в учебнике
alert( [] == [] ); // false
alert( [] == ![] ); // true

Вопрос - почему так?

В учебнике говорится, мол, разные объекты. Это, впринцепе,логично, но у массива ведь есть строковое преобразование и почему тогда код выше не эквивалентен этому?
alert( '' == '' ); // false
Ведь можно сказать, мол, это разные строки, НО результат то будет true.
Вот набросал код, который демонстрирует эту странность.
https://codepen.io/CitizenOne/pen/vWLQjg
У массива ведь всегда при попытке его выведения в какой-либо визуальный поток вызывается метод toString => получается строка при преобразовании, и при сравнении по идее тоже.

Спасибо всем огромное!
  • Вопрос задан
  • 152 просмотра
Решения вопроса 2
@lega
С обоих сторон объекты - происходит сравнение не их содержимого, а их ид.
Ответ написан
nikolayshabalin
@nikolayshabalin
Автор профессиональных курсов в HTML Academy
В JS существуют простые и сложные типы данных.

Простые :
1. Числа
2. Строки
3. Буль
4. Null
5. Undefined
6. Symbol

Сложные - объекты.
Сложные типы данных сраниваются по ссылке
var a = [];
var b = [];
a == b; // false

b = a;
a == b; // true

a.push(1);
a == b; // true


https://developer.mozilla.org/ru/docs/Web/JavaScri...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы