Question

À wtfjs, J'ai trouvé que ce qui suit est un javascript légal.

",,," == Array((null,'cool',false,NaN,4)); // true

L'argument (null,'cool',false,NaN,4) On dirait un tuple pour moi, mais JavaScript n'a pas de tuples!

Quelques tests rapides dans ma console JavaScript donne ce qui suit.

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 des instructions, renvoyant simplement la valeur de la dernière instruction.

Y a-t-il une référence quelque part qui décrit cette syntaxe et sa sémantique? Pourquoi existe-t-il, c'est-à-dire quand devrait-il être utilisé?

Était-ce utile?

La solution

Vous voyez l'effet du opérateur de virgule.

L'opérateur de virgule évalue ses deux opérandes (de gauche à droite) et renvoie la valeur du deuxième opérande.

La valeur résultante quand a,b,c,...,n est évalué sera toujours la valeur de l'expression la plus à droite, cependant tout Les expressions dans la chaîne sont toujours évaluées (de gauche à droite).

Autres conseils

Comme déjà expliqué, ce comportement est causé par , opérateur. Pour cette raison, l'expression (null,'cool',false,NaN,4) évaluera toujours à 4. Donc nous avons

",,," == Array(4)

Array(4) - Crée un nouveau tableau avec 4 éléments alloués. Au moment de la comparaison avec la chaîne, ce tableau est converti en chaîne comme il serait avec Array(4).toString(). Pour les tableaux toString Agit comme join(',') Méthode appelée sur ce tableau. Donc, pour le tableau vide de 4 éléments, jointure produira la chaîne ",,,".

Essaye ça alert((null,'cool',false,NaN,4)) Et puis vous pouvez voir.

démo

La raison en est que l'opérateur de virgule évalue toutes les déclarations et renvoie la dernière.

Pensez à cette ligne: a = 1, b = 2, c = 3; Il exécutera chaque expression, donc en substance, il définira les variables sur ce que vous voulez et renverra la dernière valeur (dans ce cas 3)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top