2010-07-07 9 views
13

Oui, cela fonctionne dans ma console firebug. Pourquoi quelque chose comme ça ne présente aucune erreur de syntaxe?Javascript: [] = 5, aucune erreur de syntaxe? Pourquoi?

[] = 5; [] = doThis(); [] = (function() {})(); 

Juste curieux de savoir pourquoi c'est autorisé.

+0

Il est une erreur dans Chrome btw ... Je pense qu'il est juste d'ignorer votre réglage et passer le long. –

Répondre

14

Ressemble Javascript dans FF permet l'affectation en utilisant la correspondance de sorte que vous pouvez définir plusieurs variables d'un seul coup:

[x,y] = [5,6]; // sets x to 5 and y to 6 

« De toute évidence », certaines implémentations JS sont très indulgents et silencieusement ignorer toutes les valeurs supplémentaires, donc ce fait la même chose:

[x,y] = [5,6,7]; 

et ce serait tout simplement pas céder quoi que ce soit:

[] = [5,6,7]; 

et en plus de cela, il semble que FF est même prêt à aller avec un cas qui ne correspond pas à un tableau du tout:

[x] = 5; // makes x undefined 

donc si vous utilisez [] = whatever alors « rien ne se voit assigner une valeur non définie ", donc il se résume à évaluer simplement le RHS.

(Attention: ceci est tout simplement deviner le sens des choses en exécutant FF ...)

+0

Wow, c'est encore plus bizarre. – Iggyhopper

+0

Très bien, Eli! +1 –

+4

Il y a un fil de discussion détaillé sur la syntaxe d'affectation destructuring de mozilla ici: http://stackoverflow.com/questions/204444/destructuring-assignment-in-javascript –

2

Je reçois une erreur de référence "Uncaught ReferenceError: Invalid Left-hand side in assignment" dans Chrome. IE8 lance "Erreur: Impossible d'affecter à '[objet]'". FF, en effet, ne pas jeter une erreur.

Ceci est probablement juste un échec du moteur Firefox de Firefox, et dans tous les cas, ne semble pas affecter la fonctionnalité du tableau littéral [].

+0

Aha, échoue sur Firefox et sur moi, car je n'ai pas testé cela dans un autre navigateur. – Iggyhopper