Значення 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
в порівнянні один з одним ==
.