Jak widać w dzienniku zmian Mozilli dla JavaScript 1.7, dodano zadanie destrukturyzacji. Niestety nie jestem bardzo lubiący składni (dlaczego napisać i B dwukrotnie):Przyporządkowanie zadań w JavaScript
var a, b;
[a, b] = f();
Coś takiego byłoby dużo lepiej:
var [a, b] = f();
To nadal będzie kompatybilny wstecz . Zwalczanie destrukcji w stylu Pythona nie będzie kompatybilne wstecz.
Zresztą najlepszym rozwiązaniem dla JavaScript 1.5, które udało mi się wymyślić to:
function assign(array, map) {
var o = Object();
var i = 0;
$.each(map, function(e, _) {
o[e] = array[i++];
});
return o;
}
Który działa jak:
var array = [1,2];
var _ = assign[array, { var1: null, var2: null });
_.var1; // prints 1
_.var2; // prints 2
Ale to naprawdę jest do bani bo _ nie ma sensu. To tylko pusta skorupa do przechowywania nazw. Ale niestety jest to konieczne, ponieważ JavaScript nie ma wskaźników. Na plus można przypisać wartości domyślne w przypadku, gdy wartości nie są dopasowane. Zauważ też, że to rozwiązanie nie próbuje ciąć tablicy. Więc nie możesz zrobić czegoś takiego jak {first: 0, rest: 0}
. Ale można to łatwo zrobić, gdyby ktoś chciał tego zachowania.
Jakie jest lepsze rozwiązanie?
Dzięki! To naprawia jeden z minusów :) –
Na dzień dzisiejszy 'var [a, b] = [1,2];' powoduje błąd składni w Chrome. – Marcin
@Marcin: JavaScript 1.7 to [język dostępny tylko w przeglądarce Mozilla] (http://stackoverflow.com/questions/1330498/what-is-cross-browser-support-for-javascript-1-7s-new-features-specifically -ar). – Shog9