Оператор ! это логический оператор и он преобразует правый операнд - массив ![ ] к типу Boolean и тем самым делает выражение логическим [ ] == false. Так как выражение стало логическим, левый операнд тоже должен быть преобразован к типу Boolean. Для этого сначала нужно преобразовать его к строке, а для этого вызывается метод toString, который преобразует массив в строку в которой через запятую перечисляются элементы массива. Но так как массив пустой, то получается строка с нулевой длиной. И вот самое непонятно почему пустая строка это false. самое странное что пустая строка преобразуется в false, хотя пустая строка это все равно строка. и в итоге получается false == false, а это верно.
vasIvas, Вот мне не совсем понятен тот момент когда в логическом выражении, массив должен сначала преобразоваться в строку...почему не сразу в Boolean? Пустой массив - false, не пустой - true, по аналогии со строкой. Сейчас же пустой массив в логическом преобразовании является true.
Вот это вот преобразовании сначала к строке что то совсем не логичное действие. И по сути то что выражение возвращает true является ошибкой
evg_96, пустой массив это false и он всегда false. И я не могу ответить, почему именно в строку преобразуется. Знать такое в js считается почетным, тем не менее те кто тратит на это время не умеют делать банальных вещей. поэтому я не трачу время на изучение того, что мне не нужно. В реальности такого кода не бывает.
![] == false [] при сравнении становится true
Выходит что true != false
А вообще даже [1] == [1] выдаст false два разных объекта (в js массив тоже объект).
Егор Живагин При чем тут логичность? Вы привели совсем другой пример, в котором по факту нет неявного преобразования типов...это и без логики понять можно что true равно true