@falc

Почему пустой массив равен пустой строке, но пустые массивы не равны?

Как можно объяснить такое поведение:
if (""==[]){ // true
  console.log("а и б равны"); 
}
if ([]==[]){ // false
  console.log("а и б равны"); 
}
  • Вопрос задан
  • 2075 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
При сравнении значений разных типов JavaScript приводит каждое из них к числу.
источник: Сравнение разных типов

Два пустых массива не равны, т.к. массивы в JS – это объекты. Два объекта равны только если они есть один и тот же объект - сидит в одной области памяти:
const arr = [];
let a = arr;
let b = arr;
a == b // true

let c = []; // одна область памяти
let d = []; // другая область памяти
c == d // false
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Hedy
Во втором случае - 2 разных объекта никогда не будут равны. (приведение типов не используется)

В первом случае используется приведение типов, аналогично данной записи: ""==[].toString()
Ответ написан
@zweroboy1
В первом случае мы видим, что кавычки равны квадратным скобкам, а во втором - квадратные скобки не равны таким же квадратным скобкам. Объяснить можно всё, в том числе и это. Думаю, правильный ответ - это нехватка здравого смысла у создателей джаваскрипта. Не представляю, как они сумели придумать такой синтаксис и не ужаснуться своему творению.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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