Значення Falsey в 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 року) (єдиними змінами після першої специфікації сценарію ECMA в 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
"Truthy" просто означає, що 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
- Будь-які подібні конструкції, які дають вам помилково рівне значення, загорнуте у тип "truthy"
[], [[]]і [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в порівнянні один з одним ==.