Co je to „Falsy“ v JavaScriptu?

Oct 28, 2019

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.