Wartości Falsey w JavaScript
false
- Zerowy
Number
typu: 0
a także -0
, 0.0
i forma hex 0x0
( dzięki RBT )
- Zero
BigInt
typu: 0n
i -0n
(nowy w 2020 roku, dzięki GetMeARemoteJob )
""
, ''
I ``
- ciągi o długości 0
null
undefined
NaN
document.all
(tylko w przeglądarkach HTML)
„Falsey” oznacza po prostu, że ToBoolean
zwraca wewnętrzną funkcję JavaScript false
. ToBoolean
tkwi u podstaw !value
, value ? ... : ...;
i if (value)
. Oto jego oficjalna specyfikacja (projekt roboczy 2020) (jedynymi zmianami od pierwszej specyfikacji ECMAscript w 1997 r. Są dodanie symboli ES6 , które zawsze są zgodne z prawdą i BigInt
wspomniane powyżej:

Porównania z ==
(luźna równość)
Warto mówić o luźnych porównaniach==
wartości fałszerstwa , które wykorzystują ToNumber()
i mogą powodować pewne zamieszanie z powodu różnic leżących u ich podstaw. Skutecznie tworzą trzy grupy:
false, 0, -0, "", ''
wszystkie pasują do siebie ==
- na przykład
false == ""
, '' == 0
i dlatego4/2 - 2 == 'some string'.slice(11);
null, undefined
pasuje do ==
- np
null == undefined
aleundefined != false
- Warto też wspomnieć, że gdy
typeof null
wróci 'object'
, null
to nie jest obiektem, jest to dawna bug / dziwactwo , że nie została ustalona w celu utrzymania kompatybilności. To nie jest prawdziwy obiekt, a obiekty są zgodne z prawdą (z wyjątkiem „umyślnego naruszenia”, document.all
gdy JavaScript jest zaimplementowany w HTML)
NaN
nie pasuje do niczego, ==
ani ===
nawet do siebie
- np
NaN != NaN
, NaN !== NaN
, NaN != false
,NaN != null
W przypadku „ścisłej równości” ( ===
) nie ma takich grupowań. Tylko false
===
false
.
Jest to jeden z powodów, dla których wielu programistów i wiele przewodników po stylu (np. Standardjs ) preferuje ===
i prawie nigdy nie używa ==
.
Naprawdę to docenia == false
„Prawda” oznacza po prostu, że ToBoolean
zwraca wewnętrzną funkcję JavaScript true
. Zrządzenie JavaScript, żeby mieć świadomość (i kolejny dobry powód, aby wolą ===
nad ==
): jest to możliwe, to jest wartość nie będzie truthy ( ToBoolean
wraca true
), ale również == false
.
Możesz pomyśleć, że if (value && value == false) alert('Huh?')
jest to logiczna niemożliwość, która nie mogła się wydarzyć, ale tak będzie, ponieważ:
"0"
i '0'
- to niepuste ciągi, które są zgodne z prawdą, ale JavaScript ==
dopasowuje liczby do równoważnych ciągów (np 42 == "42"
.). Od tego 0 == false
, czy "0" == 0
, "0" == false
.
new Number(0)
i new Boolean(false)
- są przedmiotami, które są zgodne z prawdą, ale ==
dostrzegają ich wartości, które == false
.
0 .toExponential();
- obiekt o wartości liczbowej równoważnej do 0
- Wszelkie podobne konstrukcje, które dają fałszywie wyrównaną wartość opakowaną w typ, który jest prawdziwy
[]
, [[]]
oraz [0]
(dzięki cloudfeet za link do tabeli równości JavaScript )
Niektóre bardziej prawdziwe wartości
To tylko kilka wartości, których niektórzy mogą się spodziewać, że są fałszywi, ale w rzeczywistości są prawdomówni.
-1
i wszystkie niezerowe liczby ujemne
' '
, " "
, "false"
, 'null'
... wszystkie niepuste ciągi, w tym strun, które są po prostu białe znaki
Wszystko typeof
, co zawsze zwraca niepusty ciąg, na przykład:
Każdy obiekt (z wyjątkiem „umyślnego naruszenia” document.all
w przeglądarkach; pamiętaj, że null
tak naprawdę nie jest to obiekt, mimo że typeof
sugeruje inaczej). Włącznie z:
{}
[]
function(){}
lub () => {}
(dowolna funkcja, w tym puste funkcje)
Error
i każdy przypadek Error
- Każde wyrażenie regularne
- Wszystko utworzone za pomocą
new
(w tym new Number(0)
i new Boolean(false)
)
- Dowolny symbol
true
, 1
, "1"
I [1]
powrót true
w stosunku do siebie nawzajem ==
.