In JavaScript is een waarde falsy als JavaScript’s ingebouwde type coercion het converteert naar false
. Neem bijvoorbeeld het onderstaande if
statement:
if (v) { console.log('v is not falsy');}
De console.log()
zal alleen worden uitgevoerd als v
niet een van de onderstaande waarden is:
false
0
-
0n
: 0 als een BigInt -
''
: Lege string null
undefined
NaN
Deze 7 waarden zijn de enige falsy waarden in JavaScript. Elke waarde die niet falsy is, is truthy.
In het bijzonder, een niet-null object is altijd truthy, zelfs als zijn valueOf()
functie een falsy waarde retourneert.
function isFalsy(v) { return !v;}// `false`. The object form of `0` is truthy, even though 0 is falsy.isFalsy(new Number(0));
Aanbevelingen
Het gebruik van truthy/falsy voor impliciete type coercions in if
statements is typisch rommelig. Het komt zelden voor dat de 7 falsy waarden precies de set waarden zijn waar u op wilt letten.
Voorbeeld, stel dat u een functie implementeert die controleert of een string korter is dan 25 tekens.
function checkLength(v) { if (!v) { throw new Error('Must provide a string!'); } return v.length < 25;}
Helaas zal checkLength('')
een fout geven omdat lege string falsy is. In plaats daarvan moet u controleren of v
een string is:
function checkLength(v) { if (typeof v !== 'string') { throw new Error('Must provide a string!'); } return v.length < 25;}
Nullish Values
In plaats van te controleren op truthy/falsy waarden, wilt u meestal controleren op “nullish” waarden. Een van de veel voorkomende gevallen voor falsy controles is ervoor te zorgen dat u geen TypeError: Cannot read property 'prop' of null
-fout krijgt bij het benaderen van een eigenschap met een waarde v
.
Het is veilig om v.prop
te benaderen, tenzij v
strikt gelijk is aan null
of undefined
. Zelfs NaN.prop
is prima.
const x = Number('abc');x; // NaNx.prop; // undefined
Controleren of v == null
gelijk is aan v === null || v === undefined
.Met andere woorden, een waarde is alleen losjes gelijk aan null
als deze strikt gelijk is aan null
of undefined
. Dus controleren of v == null
is vaak nauwkeuriger dan controleren op truthy of falsy waarden.
Meer Fundamentele tutorials
- Hoe Objecten te vergelijken in JavaScript
- Hoe te controleren of een JavaScript Variabele ongedefinieerd is
- Het verschil tussen let en var in JavaScript
- JavaScript String Interpolation
- Globale Variabelen in JavaScript
- Hoe te controleren op `NaN` in JavaScript
- JavaScript Enums