Javascript “tuple” notation: quel est son intérêt?
À wtfjs, j'ai trouvé que celui-ci est légal javascript.
",,," == Array((null,'cool',false,NaN,4)); //true
L'argument (null,'cool',false,NaN,4)
ressemble à un n-uplet pour moi, mais le javascript n'ont pas de tuples!
Quelques tests rapides dans ma console javascript rendements suivants.
var t = (null,'cool',false,NaN,4); //t = 4
(null,'cool',false,NaN,4) === 4; //true
(alert('hello'), 42); //shows the alert and returns 42
Il semble se comporter exactement comme un point-virgule ;
liste séparée par des états, il suffit de retourner la valeur de la dernière déclaration.
Est-il une référence quelque part qui décrit cette syntaxe et sa sémantique? Pourquoi existe-t-elle, c'est à dire quand doit-il être utilisé?
- C'est l'opérateur virgule: javascriptweblog.wordpress.com/2011/04/04/...
- L'opérateur virgule peut aussi être (ab)utilisé pour exécuter une série de fonctions à l'intérieur d'un ternaire de la branche, comme il sera de retour le résultat de la dernière instruction de toute façon:
var a = isTrue ? (b=f(c), g(b)) : (b=g(c), f(b))
. Rarement sage, mais parfois utile, si très concis code est préféré plus de lisibilité, ou rapide à des fins de débogage. - Ceci est appelé "l'expression" en JavaScript, ce n'est pas simplement un effet de l'opérateur virgule s'il joue une petite partie; Cette expression est résolu à cause de l'opérateur virgule. Vous pouvez définir une valeur pour toute mutable variable de l'expression évaluée. Même si l'expression n'est pas définie.
Vous devez vous connecter pour publier un commentaire.
Vous voyez l'effet de la opérateur virgule.
La valeur résultante lorsque
a,b,c,...,n
est évaluée sera toujours la valeur de la partie droite de l'expression, cependant tous expressions de la chaîne sont encore évaluées (de gauche à droite).Comme déjà expliqué ce comportement est provoqué par
,
de l'opérateur. Pour cette raison, l'expression(null,'cool',false,NaN,4)
toujours évaluer à4
. Nous avons doncArray(4)
- crée un nouveau tableau avec alloué 4 éléments. Au moment de la comparaison avec la chaîne de ce tableau est converti en chaîne comme il le serait avecArray(4).toString()
. Pour les tableauxtoString
agit commejoin(',')
méthode appelée sur ce tableau. Donc, pour le vide d'un tableau de 4 éléments de jointure va produire de la chaîne",,,"
.Essayer cette
alert((null,'cool',false,NaN,4))
et ensuite vous pouvez voir.démo
La raison en est que l'opérateur virgule évalue tous les états et de retour de la dernière.
Pense de cette ligne:
a = 1, b = 2, c = 3;
il sera exécuté à chaque expression donc, en substance, il permettra de définir les variables de ce que vous voulez et retourne la dernière valeur (dans ce cas 3)