Hvad er “Falsy” i JavaScript?

28. okt 2019

I JavaScript er en værdi falsy, hvis JavaScript’s indbyggede typekonvertering konverterer den til false. Overvej f.eks. nedenstående if-anvisning:

if (v) { console.log('v is not falsy');}

Den console.log() vil kun køre, hvis v ikke er en af nedenstående værdier:

  • false
  • 0
  • 0n: 0 som et BigInt
  • '': Tom streng
  • null
  • undefined
  • NaN

Disse 7 værdier er de eneste falske værdier i JavaScript. Alle værdier, der ikke er falske, er sandfærdige.

I særdeleshed er et objekt, der ikke er nul, altid truthy, selv om dets valueOf() funktion returnerer en falsy-værdi.

function isFalsy(v) { return !v;}// `false`. The object form of `0` is truthy, even though 0 is falsy.isFalsy(new Number(0));

Anbefalinger

Anvendelse af truthy/falsy til implicitte typekoercioner i if-erklæringer er typisk rodet. Det er sjældent at finde et tilfælde, hvor de 7 falsy-værdier er præcis det sæt af værdier, som du ønsker at holde øje med.

Formodtag for eksempel, at du implementerer en funktion, der kontrollerer, at en streng er kortere end 25 tegn.

function checkLength(v) { if (!v) { throw new Error('Must provide a string!'); } return v.length < 25;}

Det er uheldigt, at checkLength('') vil kaste en fejl, fordi tom streng erfalsy. I stedet skal du kontrollere, om v er en streng:

function checkLength(v) { if (typeof v !== 'string') { throw new Error('Must provide a string!'); } return v.length < 25;}

Nullish-værdier

I stedet for at kontrollere for sandfærdige/falske værdier ønsker du normalt at kontrollere for “nullish”-værdier. Et af de almindelige anvendelsestilfælde for falske kontroller er at sikre, at du ikke får en TypeError: Cannot read property 'prop' of null-fejl, når du får adgang til en egenskab med en værdi v.

Det er det er sikkert at få adgang til v.prop, medmindre v er strengt lig med null eller undefined. Selv NaN.prop er fint.

const x = Number('abc');x; // NaNx.prop; // undefined

Kontrol af, om v == null svarer til v === null || v === undefined.Med andre ord, en værdi er kun løst lig med null, hvis den er strengt lig med null eller undefined. Så kontrol af, om v == null er ofte mere nøjagtig end kontrol af sandfærdige eller falske værdier.

Mere grundlæggende vejledninger

  • Sådan sammenligner du objekter i JavaScript
  • Sådan tjekker du, om en JavaScript-variabel er udefineret
  • Forskellen mellem let og var i JavaScript
  • JavaScript String Interpolation
  • Globale variabler i JavaScript
  • Sådan tjekker du for `NaN` i JavaScript
  • JavaScript Enums

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.