JavaScript: пустой массив
почему сравнение пустых массивов в JavaScript дает неожиданный результат
Давайте сравним в JavaScript пустой массив []
с его логическим антиподом ![]
.
console.log([] == ![])
Думаете, что в результате будет false
?
Результат:
true
Кажется, результат обескураживает. Но, пожалуй, стоит обратиться к логике языка программирования.
- Начнем с того, что JavaScript является слабо типизированным языком программирования и не требует явного указания типа данных для переменной.
- Также не будем забывать, что оператор логического отрицания
!
меняет значение операнда с истины на ложь и наоборот. - Наконец, запомним, что пустой массив
[]
является истинноподобным (truthy) значением.
В JavaScript истинноподобное (truthy) значение — это значение, являющееся истиной в булевом контексте. К таким значениям относятся все значения кроме ложноподобных значений. Это означает, что в JavaScript все значения истинноподобны за исключением false, 0, -0, 0n, “”, null, undefined и NaN.
Обогатившись знаниями, вернемся к нестрогому сравнению пустого массива и его противоположности:
- Выражение
![]
соответствует!true
и вернетfalse
. - Оператор
==
при сравнении приводит операнды к числам, а значитfalse
соответствует0
, и[]
тоже равен0
. - Очевидно, что сравнение двух
0
даетtrue
- Результат:
true
.
Спасибо за внимание.