Javaskriptissä arvo on falsy, jos JavaScriptin sisäänrakennettu tyypin pakkokorjaus muuntaa sen arvoksi false
. Tarkastellaan esimerkiksi alla olevaa if
-lausetta:
if (v) { console.log('v is not falsy');}
console.log()
toimii vain, jos v
ei ole yksi alla olevista arvoista:
false
0
-
0n
: 0 BigInt:nä -
''
: Tyhjä merkkijono null
undefined
NaN
Nämä 7 arvoa ovat JavaScriptin ainoat virheelliset arvot. Kaikki arvot, jotka eivät ole virheellisiä, ovat totuudenmukaisia.
Erityisesti ei-null-olio on aina totuudellinen, vaikka sen valueOf()
-funktio palauttaisi falsy-arvon.
function isFalsy(v) { return !v;}// `false`. The object form of `0` is truthy, even though 0 is falsy.isFalsy(new Number(0));
Suositukset
Totuudellisuuden/falsy:n käyttäminen implisiittisiin tyyppipakotteisiin if
-lausekkeissa on tyypillisesti sekavaa. On harvinaista löytää tapaus, jossa 7 falsy-arvoa on juuri se joukko arvoja, joita halutaan varoa.
Esimerkiksi oletetaan, että olet toteuttamassa funktiota, joka tarkistaa, että merkkijono on lyhyempi kuin 25 merkkiä.
function checkLength(v) { if (!v) { throw new Error('Must provide a string!'); } return v.length < 25;}
Epäonnekseen checkLength('')
heittää virheen, koska tyhjä merkkijono onfalsy. Sen sijaan sinun pitäisi tarkistaa, onko v
merkkijono:
function checkLength(v) { if (typeof v !== 'string') { throw new Error('Must provide a string!'); } return v.length < 25;}
Tyhjät arvot
Todellisten/väärien arvojen tarkistamisen sijaan haluat yleensä tarkistaa ”tyhjät” arvot. Yksi falsy-tarkastusten yleisistä käyttötapauksista on varmistaa, ettet saa TypeError: Cannot read property 'prop' of null
-virhettä, kun käytät ominaisuutta, jonka arvo on v
.
Se on turvallista käyttää v.prop
, ellei v
ole tiukasti yhtä suuri kuin null
tai undefined
. Jopa NaN.prop
on hyvä.
const x = Number('abc');x; // NaNx.prop; // undefined
Tarkistetaan, onko v == null
yhtä suuri kuin v === null || v === undefined
.Toisin sanoen arvo on löyhästi yhtä suuri kuin null
vain, jos se on tiukasti yhtä suuri kuin null
tai undefined
. Joten sen tarkistaminen, onko v == null
, on usein tarkempi kuin totuudenmukaisten tai virheellisten arvojen tarkistaminen.
Lisää perusteiden opetusohjelmia
- How to Compare Objects in JavaScript
- How to Check if a JavaScript Variable is Undefined
- The Difference Between let ja var JavaScriptissä
- JavaScript-merkkijonojen interpolointi
- Globaalit muuttujat JavaScriptissä
- How to Check for `NaN` in JavaScript
- JavaScript Enums