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