Như có thể thấy trong Mozilla changlog cho JavaScript 1.7, chúng đã thêm phép gán destructuring. Đáng buồn là tôi không phải là rất thích cú pháp (tại sao viết a, b hai lần?):Phân công chuyển cấu trúc trong JavaScript
var a, b;
[a, b] = f();
Something như thế này sẽ tốt hơn rất nhiều:
var [a, b] = f();
Đó vẫn sẽ là tương thích ngược . Sự phá hủy giống như Python sẽ không tương thích ngược.
Dù sao giải pháp tốt nhất cho JavaScript 1.5 mà tôi đã có thể đưa ra là:
function assign(array, map) {
var o = Object();
var i = 0;
$.each(map, function(e, _) {
o[e] = array[i++];
});
return o;
}
Những công trình như:
var array = [1,2];
var _ = assign[array, { var1: null, var2: null });
_.var1; // prints 1
_.var2; // prints 2
Nhưng điều này thực sự sucks vì _ không có ý nghĩa. Nó chỉ là một vỏ rỗng để lưu trữ tên. Nhưng thật đáng buồn là nó cần thiết vì JavaScript không có con trỏ. Về phía cộng, bạn có thể gán giá trị mặc định trong trường hợp các giá trị không khớp. Cũng lưu ý rằng giải pháp này không cố gắng cắt mảng. Vì vậy, bạn không thể làm điều gì đó như {first: 0, rest: 0}
. Nhưng điều đó có thể dễ dàng được thực hiện, nếu một người muốn hành vi đó.
Giải pháp tốt hơn là gì?
Cảm ơn! Điều đó khắc phục một trong những nhược điểm :) –
Kể từ hôm nay 'var [a, b] = [1,2];' dẫn đến lỗi cú pháp trong Chrome. – Marcin
@Marcin: JavaScript 1.7 là [ngôn ngữ chỉ dành cho Mozilla] (http://stackoverflow.com/questions/1330498/what-is-cross-browser-support-for-javascript-1-7s-new-features-specifically -ar) – Shog9