Qu'est-ce que c'est en javascript: "var var1 = var1 || "

Je veux simplement augmenter mes connaissances de javascript de base.

Parfois, je vois cette déclaration, mais je ne sais pas ce qu'elle fait:

var var1 = var1 || []; 

Qu'est-ce que cela signifie et / ou pour quoi, et comment l'utilisez-vous?

Je vous remercie.

Les opérateurs logiques en JavaScript évaluent réellement l'un des deux objets. Lorsque vous utilisez a || b a || b il évalue à b si a est faux, ou a si a est vrai. Ainsi, a || [] a || [] Sera a si a est une valeur vraie ou [] si a est une valeur fausse.

Il est beaucoup plus évident d'utiliser if (!a) { a = [] };

Fondamentalement, il semble voir si une variable var1 existe déjà et est "vérité". Si c'est le cas, il attribue à sa variable locale la variable var1 ; Sinon, il est attribué un tableau vide.

Cela fonctionne parce que le JavaScript || L'opérateur renvoie la valeur du premier opérande de vérité, ou le dernier, si aucun n'est vrai. var1 || var2 var1 || var2 renvoie var1 si c'est vraiy, ou var2 sinon.

Voici quelques exemples:

 var somevar; somevar = 5 || 2; // 5 somevar = 0 || 2; // 2 somevar = 0 || null; // null 

Valeurs qui ne sont pas "vérité": false , 0 , undefined , null , "" (chaîne vide) et NaN . Les tableaux et les objets vides sont considérés comme vérités dans JavaScript, contrairement à d'autres langues.

Il attribue un tableau vide à var1 , si la représentation booléenne est fausse (par exemple, elle n'a pas été initialisée).

Fondamentalement si var1 est NULL ou false , var1 sera configuré sur un array vide.

Javascript ou (||) fonctionne un peu différemment à d'autres langues, il renvoie la première valeur "vérité" au lieu d'un booléen. Ceci est utilisé dans ce cas pour dire "Définir la valeur de var1 à var1 , mais si cette valeur est" faux ", définissez-la sur [] ".

Ceci est souvent utilisé pour définir une valeur "par défaut" sur une variable qui peut ou non être définie, comme un argument vers une fonction.

Le || L'opérateur évalue le premier de ses opérandes qui est "vrai".

[] Est un tableau vide. ( [ "Hi!" ] Est un tableau d'une chaîne)

Par conséquent, l'expression x || [] x || [] Évalue x si c'est "truey" ou un tableau vide si ce n'est pas le cas.

Cela permet au paramètre var1 d'être optionnel.

La déclaration attribue un tableau vide à var1.


Réponse plus longue et explication:

Cela se produit car var1 n'est pas initialisé à ce moment-là. Non initialisé est une valeur faussement.

Prenez cette déclaration:

 var1 = var1 || []; 

Si var1 n'est pas initialisé, il devient un tableau vide, s'il s'agit d'un tableau vide, rien ne se produit comme étant attribué à un tableau vide, si var1 est false , null ou toute autre valeur que javascript choses fausses , il devient un tableau vide , Si var1 est une autre valeur, rien ne se passe car il lui est assigné. (Merci pst pour le lien).

En bref, c'est une déclaration stupide qui n'est ni lisible ni utile, mais vous êtes intelligent pour vouloir savoir ce que cela signifie. 🙂

Bien que cela ait été souligné comme étant «une déclaration stupide», je présente les deux compteurs suivants:

(Juste pour garder les gens sur leurs orteils et renforcer certains des «plus beaux détails» de JavaScript.)

1)

var est la variable est déjà local . Par exemple

 function x (y) { var y = y || 42 // redeclaration warning in FF, however it's "valid" return y } x(true) // true x() // 42 

2)

var est une annotation fonctionnelle (elle est "hissée" vers le haut) et non une déclaration au point d'utilisation.

 function x () { y = true var y = y || 42 } x() // true 

Je n'aime pas le code comme l'un des précédents, mais …

En raison du levage et des déclarations autorisées, le code dans la publication comporte ces sémantiques:

 var var1 if (!var1) { var1 = [] } 

Edit Je ne suis pas conscient de la façon dont le mode "strict" dans Ed.5 influence ce qui précède.