Как это понимать? массив не равен самому себе?
Как это понимать, если в случае
0 == ['0'] // true - это понятно, так как это разные типы и 0 === ['0'] возвращает false, то как быть с этим:
a = ['0'];
a == ['0'] возвращает false
a === ['0'] возвращает false
['0'] == ['0'] возвращает false
['0'] === ['0'] возвращает false
Ответы (1 шт):
Непримитивные типы данных сравниваются по ссылке, а не по значению. Каждый раз когда вы пишите ['0'] создаётся новый массив, а значит новая ссылка. Потому они между собой не равны
"0 == ['0'] // true - это понятно" - мне кажется вам это НЕ понятно. Тут применяется 11-ый пункт алгоритма нестрого сравнения, где говорится, что если слева у нас число, а справа объект, то будут сравниваться число с объектом, приведённым к примитивному типу. В случае массива вызовется метод .toString(), который нам вернёт '0', вместо массива, а дальше идёт сравнение между 0 как число и 0 как строка
Этот случай описан в 5-ом пункте алгоритма, где говорится, что если слева число, а справа строка, то будут сравниваться число со строкой приведённой к типу числа, т.е. сработает Number('0'), что нам вернёт 0 как число
И так в итоге мы получаем 0 == 0 - это правда, значит мы получим true