Vad är ”Falsy” i JavaScript?

28 okt 2019

I JavaScript är ett värde falsy om JavaScript:s inbyggda typkonvertering omvandlar det till false. Tänk till exempel på nedanstående if-anvisning:

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

console.log()Den console.log() kommer endast att köras om v inte är något av nedanstående värden:

  • false
  • 0
  • 0n: 0 som BigInt
  • '': Tom sträng
  • null
  • undefined
  • NaN

De här 7 värdena är de enda falska värdena i JavaScript. Alla värden som inte är falska är sanna.

I synnerhet är ett objekt som inte är noll alltid sanningsenligt, även om dess valueOf() funktion returnerar ett falskt värde.

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

Rekommendationer

Användning av sanningsenligt/falskt för implicita typsammanhållningar i if-utsagor är typiskt sett rörigt. Det är sällan man hittar ett fall där de 7 falska värdena är exakt den uppsättning värden som man vill hålla utkik efter.

Antag till exempel att du implementerar en funktion som kontrollerar att en sträng är kortare än 25 tecken.

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

Olyckligtvis kommer checkLength('') att kasta ett fel eftersom tom sträng ärfalskt. Istället bör du kontrollera om v är en sträng:

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

Nollvärden

Istället för att kontrollera om värdena är sanningsenliga/falska vill du vanligtvis kontrollera om värdena är ”nollvärden”. Ett av de vanligaste användningsfallen för falska kontroller är att se till att du inte får ett TypeError: Cannot read property 'prop' of null fel när du får tillgång till en egenskap med värdet v.

Det är säkert att få tillgång till v.prop om inte v är strikt lika med null eller undefined. Även NaN.prop går bra.

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

Kontrollerar om v == null är likvärdigt med v === null || v === undefined.Med andra ord är ett värde löst likvärdigt med null endast om det är strikt likvärdigt med null eller undefined. Att kontrollera om v == null är alltså ofta mer exakt än att kontrollera om värdena är sanningsenliga eller falska.

Mer grundläggande handledning

  • Hur man jämför objekt i JavaScript
  • Hur man kontrollerar om en JavaScript-variabel är odefinierad
  • Skillnaden mellan låt och var i JavaScript
  • JavaScript String Interpolation
  • Globala variabler i JavaScript
  • Hur man kontrollerar om `NaN` i JavaScript
  • JavaScript Enums

Lämna ett svar

Din e-postadress kommer inte publiceras.