138 votes

Ruby's ||= (or equals) in JavaScript?

J'adore le mécanisme de ||= de Ruby. Si une variable n'existe pas ou est nil, alors créez-la et attribuez-lui une valeur :

amount # est nul
amount ||= 0 # est 0
amount ||= 5 # est 0

J'ai besoin de faire quelque chose de similaire en JavaScript maintenant. Quelle est la convention ou la bonne manière de le faire ? Je sais que ||= n'est pas une syntaxe valide. Deux façons évidentes de le gérer sont :

window.myLib = window.myLib || {};

// ou

if (!window.myLib)
  window.myLib = {};

158voto

nXqd Points 2805

Tous les deux sont absolument corrects, mais si vous cherchez quelque chose qui fonctionne comme ||= en ruby. La première méthode qui est variable = variable || {} est celle que vous recherchez :)

22voto

C5H8NNaO4 Points 4435

Vous pouvez utiliser l'opérateur logique OU || qui évalue son opérande de droite si lVal est une valeur fausse.

Les valeurs fausses incluent par exemple null, false, 0, "", undefined, NaN

x = x || 1

11voto

Elias Zamaria Points 13196

L'opérateur que vous avez demandé a été proposé comme une fonctionnalité en JavaScript. Il est actuellement à l'Étape 4, et il sera introduit dans le prochain standard ECMAScript, qui devrait être publié en 2021.

Vous pouvez l'utiliser dès maintenant en utilisant le plugin Babel plugin-proposal-logical-assignment-operators. Je n'ai jamais utilisé ce plugin, donc je n'ai aucune idée de son efficacité.

5voto

Inkling Points 1466

Si vous travaillez avec des objets, vous pouvez utiliser la destructuration (depuis ES6) comme ceci :

({ myLib: window.myLib = {} } = window);

...mais vous ne gagnez rien de plus que la réponse acceptée, sauf de la confusion.

4voto

Igor Sukharev Points 101

Assignement nullish logique (??=)

x ??= 23

Documentation & Compatibilité des navigateurs

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