2010-07-07 9 views
13

Sí, funciona en mi consola Firebug. ¿Por qué algo como esto no presenta ningún error de sintaxis?Javascript: [] = 5, sin error de sintaxis? ¿Por qué?

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

Solo curiosidad acerca de por qué está permitido.

+0

Es un error en Chrome por cierto ... Creo que simplemente haciendo caso omiso de su configuración y de pasar a lo largo. –

Respuesta

14

Parece que el Javascript en FF permite la asignación mediante la comparación para que pueda establecer múltiples variables de una sola vez:

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

"Obviamente", algunas implementaciones JS son muy indulgente, y se ignorará cualquier valor extra, por lo esto hace lo mismo:

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

y esto no sería asignar cualquier cosa:

[] = [5,6,7]; 

y encima de eso, parece que FF es incluso dispuesto a ir con un caso que no coincida con una gran variedad en absoluto:

[x] = 5; // makes x undefined 

así que si usa [] = whatever luego "nada se le asigna un valor indefinido ", por lo que se reduce a simplemente evaluar el RHS.

(Negación: Todo esto es sólo adivinar el significado mediante la ejecución material en FF ...)

+0

Guau, eso es aún más extraño. – Iggyhopper

+0

Muy bien, Eli! +1 –

+4

Hay un hilo detallado sobre la sintaxis de asignación de desestructuración de mozilla aquí: http://stackoverflow.com/questions/204444/destructuring-assignment-in-javascript –

2

Obtengo un "Uncaught ReferenceError: lado izquierdo no válido en la asignación" en Chrome. IE8 lanza "Error: no se puede asignar a '[objeto]'". FF, de hecho, no arroja un error.

Esto probablemente sea solo un error del motor JavaScript de Firefox, y en cualquier caso, no parece afectar la funcionalidad de la matriz literal [].

+0

Aha, falla en Firefox y en mí, ya que en realidad no probé esto en otro navegador. – Iggyhopper

Cuestiones relacionadas