Como se puede ver en el changlog de Mozilla para JavaScript 1.7, han agregado la asignación de desestructuración. Por desgracia yo no soy muy aficionado a la sintaxis (¿por qué escribir y B dos veces?):Asignación de desestructuración en JavaScript
var a, b;
[a, b] = f();
Algo como esto hubiera sido mucho mejor:
var [a, b] = f();
Eso seguiría siendo compatible con versiones anteriores . La desestructuración similar a Python no sería retrocompatible.
De todos modos la mejor solución para JavaScript 1.5 que he podido llegar a decir:
function assign(array, map) {
var o = Object();
var i = 0;
$.each(map, function(e, _) {
o[e] = array[i++];
});
return o;
}
que funciona como:
var array = [1,2];
var _ = assign[array, { var1: null, var2: null });
_.var1; // prints 1
_.var2; // prints 2
Pero esto realmente apesta porque _ tiene ningún significado. Es solo un caparazón vacío para almacenar los nombres. Pero lamentablemente es necesario porque JavaScript no tiene punteros. En el lado positivo, puede asignar valores predeterminados en caso de que los valores no coincidan. También tenga en cuenta que esta solución no intenta cortar el conjunto. Entonces no puedes hacer algo como {first: 0, rest: 0}
. Pero eso podría hacerse fácilmente, si uno quisiera ese comportamiento.
¿Cuál es la mejor solución?
Gracias! Eso soluciona uno de los inconvenientes :) –
A partir de hoy 'var [a, b] = [1,2];' da como resultado un error de sintaxis en Chrome. – Marcin
@Marcin: JavaScript 1.7 es un [idioma de Mozilla solamente] (http://stackoverflow.com/questions/1330498/what-is-cross-browser-support-for-javascript-1-7s-new-features-specifically -Arkansas). – Shog9