W JavaScript, wartość jest falsyif JavaScript’s built-in type coercion konwertuje go do false
. Na przykład, rozważ poniższe if
oświadczenie:
if (v) { console.log('v is not falsy');}
console.log()
będzie działać tylko wtedy, gdy v
nie jest jedną z poniższych wartości:
false
0
-
0n
: 0 as a BigInt -
''
: Empty string null
undefined
NaN
Te 7 wartości są jedynymi wartościami falsy w JavaScript. Każda wartość, która nie jest falsy jest truthy.
W szczególności, obiekt non-null jest zawsze truthy, nawet jeśli jego funkcja valueOf()
zwraca wartość falsy.
function isFalsy(v) { return !v;}// `false`. The object form of `0` is truthy, even though 0 is falsy.isFalsy(new Number(0));
Zalecenia
Używanie truthy/falsy dla implicite type coercions w instrukcjach if
jest nietypowo niechlujne. Rzadko można znaleźć przypadek, w którym 7 wartości falsy jest dokładnie tym zestawem wartości, na które chcesz zwrócić uwagę.
Na przykład, załóżmy, że implementujesz funkcję, która sprawdza, czy łańcuch jest krótszy niż 25 znaków.
function checkLength(v) { if (!v) { throw new Error('Must provide a string!'); } return v.length < 25;}
Niestety, checkLength('')
wyrzuci błąd, ponieważ pusty łańcuch jest falsy. Zamiast tego, powinieneś sprawdzić, czy v
jest łańcuchem:
function checkLength(v) { if (typeof v !== 'string') { throw new Error('Must provide a string!'); } return v.length < 25;}
Nullish Values
Zamiast sprawdzać wartości true/falsy, zazwyczaj chcesz sprawdzić wartości „nullish”. Jednym z powszechnych przypadków użycia dla sprawdzania falsy jest upewnienie się, że nie otrzymasz błędu TypeError: Cannot read property 'prop' of null
podczas uzyskiwania dostępu do właściwości o wartości v
.
Bezpiecznie jest uzyskać dostęp do v.prop
, chyba że v
jest ściśle równe null
lub undefined
. Nawet NaN.prop
jest w porządku.
const x = Number('abc');x; // NaNx.prop; // undefined
Sprawdzanie, czy v == null
jest równoważny v === null || v === undefined
.Innymi słowy, wartość jest luźno równa null
tylko wtedy, gdy jest ściśle równa null
lub undefined
. Tak więc sprawdzanie, czy v == null
jest często bardziej dokładne niż sprawdzanie dla wartości truthy lub falsy.
More Fundamentals Tutorials
- How to Compare Objects in JavaScript
- How to Check if a JavaScript Variable is Undefined
- The Difference Between let i var w JavaScript
- JavaScriptowa interpolacja łańcuchów
- Zmienne globalne w JavaScript
- Jak sprawdzić dla `NaN` w JavaScript
- JavaScriptowe enumy
.