J'adore le ||=
mécanisme de Ruby . Si une variable n'existe pas ou existe nil
, créez-la et définissez-la égale à quelque chose:
amount # is nil
amount ||= 0 # is 0
amount ||= 5 # is 0
Je dois faire quelque chose de similaire en JavaScript maintenant. Quelle est la convention ou la bonne façon de procéder? Je sais ||=
que la syntaxe n'est pas valide. 2 façons évidentes de le gérer sont:
window.myLib = window.myLib || {};
// or
if (!window.myLib)
window.myLib = {};
x
est fausse, commefalse
, et que vous ne voulez définir une valeur par défaut que lorsquex
n'est pas défini.let amount = 0;
suivi deamount = amount || 5
changera le montant à 5. Si vous ne voulez pas que cela se produise, utilisez l'??
opérateur au lieu de||
.amount ??= 5;
.Vous pouvez utiliser l'opérateur logique OR
||
qui évalue son opérande droit s'illVal
s'agit d'une valeur erronée.Les valeurs fausses incluent par exemple
null, false, 0, "", undefined, NaN
la source
x
est fausse, commefalse
, et que vous ne voulez définir une valeur par défaut que lorsquex
n'est pas défini.Si vous travaillez avec des objets, vous pouvez utiliser la déstructuration (depuis ES6) comme ceci:
... mais vous ne gagnez rien sur la réponse acceptée, sauf la confusion.
la source
L'opérateur que vous avez interrogé a été proposé comme fonctionnalité dans JavaScript . Il est actuellement au stade 3 , donc ce n'est pas encore une partie officielle de la langue, mais il sera accepté, avec au plus des changements mineurs s'ils découvrent des problèmes majeurs inattendus.
Vous pouvez l'utiliser maintenant en utilisant le plugin Babel plugin-proposition-logical-assignment-operators . Je n'ai jamais utilisé ce plugin, donc je n'ai aucune idée de son fonctionnement.
la source
Ruby || = affectation des courts-circuits de l'opérateur. Cela peut être considéré comme ceci:
Donc, en javascript, cela semble très similaire:
Il semble cependant, comme indiqué dans les commentaires ci-dessous, que cette forme rubis littérale est moins efficace que l'idiome javascript standard a = a || b.
Pour référence: http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html
la source
a = a || b
forme soit plus optimale jsperf.com/x-or-x-equals-0-vs-x-equals-x-or-0/3a = a || b
.a || (a = b)
a la sémantique correcte pour déduire les noms de fonctions. Il est actuellement en discussion pour la nouvelle proposition.Vous pouvez obtenir le comportement souhaité en utilisant l'opérateur | = en javascript pour les entiers uniquement. Mais vous devez d'abord définir la variable.
Pour les objets
Pour les tableaux
la source
|
ou|=
. Le comportement souhaité dans la question n'est pas lié aux opérations au niveau du bit.