Je sais que je peux tester une variable javascript, puis la définir si elle n'est pas définie, mais n'y a-t-il pas un moyen de dire
var setVariable = localStorage.getItem ('valeur') || 0;
semble être une manière beaucoup plus claire, et je suis à peu près sûr que j'ai vu cela dans d'autres langues.
javascript
undefined
pédale
la source
la source
localStorage.getItem()
cela lèvera une exception si l'utilisateur a désactivé les cookies (au moins dans Chrome), vous voudrez peut-être l'envelopper dans unetry...catch
clauseRéponses:
Oui, il peut le faire, mais à proprement parler, cela attribuera la valeur par défaut si la valeur récupérée est false , par opposition à vraiment indéfinie . Il serait donc correspondre non seulement ,
undefined
mais aussinull
,false
,0
,NaN
,""
(mais pas"0"
).Si vous souhaitez définir la valeur par défaut uniquement si la variable est strictement,
undefined
le moyen le plus sûr est d'écrire:Sur les navigateurs plus récents, il est en fait sûr d'écrire:
mais sachez qu'il est possible de renverser cela sur les navigateurs plus anciens où il était permis de déclarer une variable nommée
undefined
qui a une valeur définie, provoquant l'échec du test.la source
var x = (x === undefined ? def_val : x);
comme légèrement plus longvar x = (typeof x === 'undefined') ? def_val : x;
. Le comportement diffère-t-il?undefined
d'être redéfini, ce qui a fait échouer le test d'égalité.||
approche dans un test strict pour undefined, vous devez utiliser un test explicite pourundefined
avec un conditionnel.La réponse ES6 2018 est :
Si la variable x n'est pas définie, renvoie la variable y ... sinon si la variable x est définie, renvoie la variable x.
la source
Object.is
n'est pas mieux que===
dans ce cas. "L'opérateur === (et l'opérateur == également) traite les valeurs numériques -0 et +0 comme égales et traite Number.NaN comme différent de NaN." ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) Cela n'a pas d'importance ici.Object.is
si les deux opérandes peuvent êtreNaN
.undefined
. Cela===
fonctionnera donc 100% du temps, pas seulement 98%. L'avantage d'===
être il est plus facile à lire, surtout en un coup d'œil, plus court et évite un appel de méthode inutile. Personnellement, je n'utiliserais queObject.is()
lorsque la situation l'exige et préférerais===
dans tous les autres cas.J'avais besoin de "définir une variable si non définie" à plusieurs endroits. J'ai créé une fonction en utilisant la réponse @Alnitak. Espérons que cela aide quelqu'un.
Usage:
la source
Il semble plus logique de vérifier
typeof
au lieu deundefined
? Je suppose que vous attendez un nombre lorsque vous définissez le var0
lorsqu'il n'est pas défini:Dans ce cas, si ce
getVariable
n'est pas un nombre (chaîne, objet, peu importe), setVariable est défini sur0
la source
Réponse ES2020
Avec l' opérateur de coalescence Nullish , vous pouvez définir une valeur par défaut si elle
value
est nulle ou non définie.Cependant, vous devez être conscient que l'opérateur de fusion nullish ne renvoie pas la valeur par défaut pour les autres types de valeurs fausses telles que
0
et''
.Veuillez noter que la prise en charge du navigateur pour l'opérateur est limitée. Selon les données de caniuse , seuls 48,34% des navigateurs sont pris en charge (en avril 2020). La prise en charge de Node.js a été ajoutée dans la version 14 .
la source
Si vous êtes un fan FP ( programmation fonctionnelle ), Ramda a une fonction d'aide soignée pour cela appelée defaultTo :
usage:
const result = defaultTo(30)(value)
C'est plus utile lorsqu'il s'agit de
undefined
valeurs booléennes:const result2 = defaultTo(false)(dashboard.someValue)
la source
const result = value || 30;
, sauf si vous utilisez une fonction intermédiaire et +1000 octets libvar setVariable = (typeof localStorage.getItem('value') !== 'undefined' && localStorage.getItem('value')) || 0;
la source
localStorage.getItem('value'))
retournefalse
Je suis également entré dans ce scénario aujourd'hui où je ne voulais pas que zéro soit écrasé pour plusieurs valeurs. Nous avons un fichier avec des méthodes utilitaires courantes pour des scénarios comme celui-ci. Voici ce que j'ai ajouté pour gérer le scénario et être flexible.
Il peut ensuite être appelé avec les deux derniers paramètres facultatifs si je veux définir uniquement des valeurs non définies ou également écraser les valeurs nulles ou 0. Voici un exemple d'appel à celui-ci qui définira l'ID sur -1 si l'ID est indéfini ou nul, mais ne remplacera pas une valeur 0.
la source
De nos jours, vous pouvez réellement faire votre approche avec JS:
Donc, votre exemple fonctionnera:
la source
Fonctionne même si la valeur par défaut est une valeur booléenne:
la source
Il me semble que pour les implémentations javascript actuelles,
est une bonne façon de faire cela (en utilisant la déconstruction d'objets).
la source
Affectation logique nulle, solution ES2020 +
De nouveaux opérateurs sont actuellement ajoutés aux navigateurs,
??=
,||=
, et&&=
. Cet article se concentrera sur??=
.Ceci vérifie si le côté gauche est indéfini ou nul, court-circuitant s'il est déjà défini. Sinon, le côté droit est affecté à la variable du côté gauche.
Comparaison des méthodes
Exemples de base
Exemples d'objets / de tableaux
?? = Support du navigateur juillet 2020 - .03%
?? = Documentation Mozilla
|| = Documentation Mozilla
&& = Documentation Mozilla
la source