Ложные значения в JavaScript
false
- Ноль
Numberтипа: 0а также -0, 0.0и шестигранная форма 0x0( благодаря RBT )
- Ноль
BigIntтипа: 0nи -0n(новое в 2020 году, спасибо GetMeARemoteJob )
"", ''И ``- строки длины 0
null
undefined
NaN
document.all (только в браузерах HTML)
«Falsey» просто означает, что внутренняя ToBooleanфункция JavaScript возвращается false. ToBooleanлежит в основе !value, value ? ... : ...;и if (value). Вот его официальная спецификация (рабочий проект 2020 года) (единственными изменениями с самой первой спецификации ECMAscript в 1997 году являются добавление символов ES6 , которые всегда соответствуют действительности, и BigInt, как уже упоминалось выше:

Сравнения с ==(слабое равенство)
Стоит поговорить о ложных сравнениях с== ложными значениями , которые используют ToNumber()и могут вызвать некоторую путаницу из-за основных различий. Они эффективно образуют три группы:
false, 0, -0, "", '' все соответствуют друг другу с ==
- например
false == "", '' == 0и, следовательно,4/2 - 2 == 'some string'.slice(11);
null, undefined совпадать с ==
- например,
null == undefinedноundefined != false
- Стоит также упомянуть, что пока
typeof nullвозвращается 'object',null это не объект, это давняя ошибка / причуда , которая не была установлена для того , чтобы обеспечить совместимость. Это не настоящий объект, и объекты являются правдивыми (за исключением того "преднамеренного нарушения", document.allкогда Javascript реализован в HTML)
NaN ничего не соответствует, с ==или ===даже сам по себе не
- например
NaN != NaN , NaN !== NaN, NaN != false,NaN != null
При «строгом равенстве» ( ===) таких группировок нет. Только false === false.
Это одна из причин, по которой многие разработчики и многие руководства по стилю (например, standardjs ) предпочитают ===и почти никогда не используют ==.
Истинные ценности, которые на самом деле == false
«Правда» означает, что внутренняя ToBooleanфункция JavaScript возвращается true. Причудливый Javascript, о котором нужно знать (и еще одна веская причина, чтобы предпочесть=== более ==): это возможно значение , которое должно быть truthy ( ToBooleanвозвращается true), но и == false.
Ты можешь подумать if (value && value == false) alert('Huh?') это логическая невозможность, которая не может произойти, но это произойдет для:
"0"и '0'- это непустые строки, которые являются правдивыми, но Javascript ==сопоставляет числа с эквивалентными строками (например 42 == "42"). поскольку0 == false , если "0" == 0, "0" == false.
new Number(0) и new Boolean(false) - это объекты, которые правдивы, но ==видят свои ценности, которые == false.
0 .toExponential(); - объект с числовым значением, эквивалентным 0
- Любые подобные конструкции, которые дают вам ложно-выравнивающее значение, заключенное в тип, который является правдивым
[], [[]]И [0](спасибо cloudfeet за ссылку Таблица JavaScript равенства )
Еще несколько правдивых ценностей
Это всего лишь несколько ценностей, которые некоторые люди могут считать ложными, но на самом деле они правдивы.
-1 и все ненулевые отрицательные числа
' ', " ", "false", 'null'... все непустые строки, в том числе строк, которые только пробельные
Все typeof, что от , которое всегда возвращает непустую строку, например:
Любой объект (кроме этого «преднамеренного нарушения» document.allв браузерах; помните, что на nullсамом деле это не объект, несмотря на typeofпредположение об обратном). Включая:
{}
[]
function(){}или () => {}(любая функция, включая пустые функции)
Error и любой случай Error
- Любое регулярное выражение
- Все, что создано с помощью
new(в том числе new Number(0)и new Boolean(false))
- Любой символ
true, 1, "1"И [1]возвращение trueпо сравнению друг с другом ==.