2012-05-10 15 views
11

Mientras observa algo de código Javascript de Mozilla (Firefox) Add-on SDK, vi declaración de tipo de variables que no había visto antes:Javascript - La asignación de múltiples variables a las propiedades de objetos que se utilizan llaves de declaración de variables

var { foo, bar } = someFunction("whatever"); // just an example 

¿Ves esas llaves alrededor del nombre de la variable? Resulta que esta es una forma de asignar los valores de las propiedades de un objeto a múltiples variables, todas a la vez. Parece similar a destructuring assignment o PHP list, excepto con propiedades de objeto en lugar de matrices.

De hecho, descubrí esto mediante algunos ajustes, ya que parece que no hay documentación sobre el mismo. Eche un vistazo a este código:

function gimmeAnObject() { 
    return { 
     foo: "hey", 
     bar: "sup" 
    }; 
} 

console.log(gimmeAnObject()); // Object { foo="hey", bar="sup" } 

var { foo, bar } = gimmeAnObject(); 

console.log(foo); // hey 
console.log(bar); // sup 

También encontré que esto solo funciona en Firefox. Chrome arrojará un error en su lugar: "Untaught SyntaxError: Token inesperado {". Eso explica por qué no lo había visto antes de empezar a buscar el código adicional de Firefox.

¿Alguien más ha visto este tipo de declaración de variables anteriormente? ¿Por qué no puedo encontrar documentación sobre esto? Como solo funciona en Firefox, creo que podría ser una cosa de Mozilla, pero ni siquiera pude encontrar nada al respecto en MDN. Por otra parte, tal vez simplemente no sabía qué buscar.

+0

posible duplicado de [Constante declaración con bloque] (http://stackoverflow.com/questions/10199229/constant-declaration-with-block) –

+1

Encontré esta pregunta mientras redactaba una pregunta casi idéntica :) – Motti

Respuesta

5

En cuanto a los enlaces "asignación desestructurada" (es decir http://en.wikipedia.org/wiki/JavaScript_syntax#Assignment y http://dailyjs.com/2011/09/12/destructuring/) parece que esta construcción es la asignación desestructurada.

Wikipedia:

In Mozilla's JavaScript, since version 1.7, destructuring assignment allows the assignment of parts of data structures to several variables at once. The left hand side of an assignment is a pattern that resembles an arbitrarily nested object/array literal containing l-lvalues at its leafs which are to receive the substructures of the assigned value.

En arrays y objetos JavaScript son más o menos lo mismo por lo que no es muy sorprendente que el apoyo para las matrices de construcción también es compatible con los objetos.

+1

Huh, parece que tienes razón. Me pregunto por qué hay tan poca documentación sobre eso, sin embargo. Supongo que nadie más que Mozilla vio la utilidad de la asignación de desestructuración. – grant

0

No puede hacerlo. Usted tiene que nombrar var y hacer algo como esto:

var myObj = (function(){ 
    return { 
     foo: 'foo', 
     bar: 'bar' 
    }; 
})(); 
+1

Usted Eso creo, sí, pero parece que en Firefox, puedes. Intenta ejecutar el enlace jsFiddle que publiqué en Firefox con una consola abierta. – grant

+0

Quizás Firefox es un poco más permisivo, o simplemente tiene una implementación propia que lo permite. Pero supongo que esta declaración no está en los estándares web –

+2

Se está agregando a los estándares web. Espera unos años. ;) –

Cuestiones relacionadas