235 votes

Définir une variable si elle est indéfinie en JavaScript

Je sais que je peux tester une variable JavaScript et la définir si elle est undefined mais n'y a-t-il pas un moyen de dire

var setVariable = localStorage.getItem('value') || 0;

semble être une façon beaucoup plus claire, et je suis presque sûr d'avoir vu cela dans d'autres langues.

362voto

Alnitak Points 143355

Oui, il peut le faire, mais strictement parlant, cela attribuera la valeur par défaut si la valeur récupérée est faux par opposition à véritablement indéfini . Elle ne correspondrait donc pas seulement undefined mais aussi null , false , 0 , NaN , "" (mais no "0" ).

Si vous voulez que la variable soit définie par défaut uniquement si elle est strictement undefined alors le moyen le plus sûr est d'écrire :

var x = (typeof x === 'undefined') ? your_default_value : x;

Sur les navigateurs les plus récents, il est possible d'écrire en toute sécurité :

var x = (x === undefined) ? your_default_value : x;

mais sachez qu'il est possible de contourner cette règle sur les anciens navigateurs où il était permis de déclarer une variable nommée undefined qui a une valeur définie, ce qui fait échouer le test.

100voto

Gibolt Points 4072

Devoir de nullité logique, solution ES2020+.

De nouveaux opérateurs sont actuellement ajoutés aux navigateurs, ??= , ||= y &&= . Ce post se concentrera sur ??= .

Cela vérifie si le côté gauche est undefined o null , court-circuit si déjà défini. Sinon, le côté droit est affecté à la variable du côté gauche.

Comparaison des méthodes

// Using ??=
name ??= "Dave"

// Previously, ES2020
name = name ?? "Dave"

// or
if (typeof name === "undefined" || name === null) {
    name = true
}

// Before that (not equivalent, but commonly used)
name = name || "Dave" // Now: name ||= "Dave"

Exemples de base

let a       // undefined
let b = null
let c = false

a ??= true  // true
b ??= true  // true
c ??= true  // false

Exemples d'objets/de tableaux

let x = ["foo"]
let y = { foo: "fizz" }

x[0] ??= "bar"  // "foo"
x[1] ??= "bar"  // "bar"

y.foo ??= "buzz"  // "fizz"
y.bar ??= "buzz"  // "buzz"

x  // Array [ "foo", "bar" ]
y  // Object { foo: "fizz", bar: "buzz" }

Support des navigateurs Sept 2021 - 90

Documentation Mozilla

||= Documentation Mozilla

&&= Documentation Mozilla

31voto

Sterling Bourne Points 2390

La réponse de l'ES6 2018 est :

return Object.is(x, undefined) ? y : x;

Si la variable x est indéfinie, on retourne la variable y... sinon, si la variable x est définie, on retourne la variable x.

21voto

wentjun Points 9821

Réponse ES2020

Avec le Coalescence nulle Opérateur, vous pouvez définir une valeur par défaut si value est nulle ou indéfinie.

const setVariable = localStorage.getItem('value') ?? 0;

Cependant, vous devez savoir que l'opérateur de coalescence nullish ne renvoie pas la valeur par défaut pour d'autres types de valeurs falsy telles que 0 y '' .

Cependant, prenez note de la Support du navigateur . Vous devrez peut-être utiliser un compilateur JavaScript tel que Babel pour le convertir en quelque chose de plus compatible avec le passé. Si vous utilisez Node.js, il a été pris en charge par la Commission européenne. depuis la version 14 .

19voto

Daniel A. White Points 91889

Oui, JavaScript peut le faire. L'avez-vous essayé ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X