Wartości Falsey w JavaScript
false
- Zerowy
Numbertypu: 0a także -0, 0.0i forma hex 0x0( dzięki RBT )
- Zero
BigInttypu: 0ni -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 ToBooleanzwraca wewnętrzną funkcję JavaScript false. ToBooleantkwi 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 BigIntwspomniane 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 == "", '' == 0i dlatego4/2 - 2 == 'some string'.slice(11);
null, undefined pasuje do ==
- np
null == undefinedaleundefined != false
- Warto też wspomnieć, że gdy
typeof nullwróci 'object', nullto 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.allgdy 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 ToBooleanzwraca 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 ( ToBooleanwraca 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.allw przeglądarkach; pamiętaj, że nulltak naprawdę nie jest to obiekt, mimo że typeofsugeruje 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 truew stosunku do siebie nawzajem ==.