V JavaScriptu je hodnota falsy, pokud ji vestavěný typ JavaScriptu převede na false
. Uvažujme například následující příkaz if
:
if (v) { console.log('v is not falsy');}
Příkaz console.log()
se spustí pouze tehdy, pokud v
není jednou z následujících hodnot:
false
0
-
0n
: 0 jako BigInt -
''
: Prázdný řetězec null
undefined
NaN
Těchto 7 hodnot je jedinými falešnými hodnotami v jazyce JavaScript. Každá hodnota, která není falsy, je pravdivá.
Zejména objekt, který není nulový, je vždy truthy, i když jeho valueOf()
funkce vrací hodnotu falsy.
function isFalsy(v) { return !v;}// `false`. The object form of `0` is truthy, even though 0 is falsy.isFalsy(new Number(0));
Doporučení
Používání truthy/falsy pro implicitní typové koerciony v if
příkazech je typicky chaotické. Málokdy se najde případ, že 7 falsy hodnot je přesně ta množina hodnot, na kterou chcete dávat pozor.
Předpokládejme například, že implementujete funkci, která kontroluje, zda je řetězec kratší než 25 znaků.
function checkLength(v) { if (!v) { throw new Error('Must provide a string!'); } return v.length < 25;}
Naneštěstí checkLength('')
vyhodí chybu, protože prázdný řetězec je falsy. Místo toho byste měli zkontrolovat, zda v
je řetězec:
function checkLength(v) { if (typeof v !== 'string') { throw new Error('Must provide a string!'); } return v.length < 25;}
Nulové hodnoty
Místo kontroly pravdivých/nepravdivých hodnot obvykle chcete kontrolovat „nulové“ hodnoty. Jedním z běžných případů použití kontroly falsy je ujištění, že při přístupu k vlastnosti s hodnotou v
nedojde k chybě TypeError: Cannot read property 'prop' of null
.
Je bezpečné přistupovat k v.prop
, pokud v
není striktně rovno null
nebo undefined
. Dokonce i NaN.prop
je v pořádku.
const x = Number('abc');x; // NaNx.prop; // undefined
Kontrola, zda v == null
je ekvivalentní v === null || v === undefined
. jinými slovy, hodnota je volně rovna null
pouze tehdy, pokud je striktně rovna null
nebo undefined
. Takže kontrola, zda v == null
je často přesnější než kontrola pravdivých nebo nepravdivých hodnot.
Další základní návody
- Jak porovnat objekty v JavaScriptu
- Jak zkontrolovat, zda je proměnná v JavaScriptu nedefinovaná
- Rozdíl mezi let a var v JavaScriptu
- JavaScriptová interpolace řetězců
- Globální proměnné v JavaScriptu
- Jak zkontrolovat `NaN` v JavaScriptu
- JavaScriptové enumy