从 JavaScript 1.7 的 Mozilla changlog 中可以看出,它们添加了解构赋值。可悲的是,我不太喜欢这种语法(为什么要写两次 a 和 b?):
var a, b;
[a, b] = f();
这样的事情会好很多:
var [a, b] = f();
那仍然是向后兼容的。类似 Python 的解构不会向后兼容。
无论如何,我能想到的 JavaScript 1.5 的最佳解决方案是:
function assign(array, map) {
var o = Object();
var i = 0;
$.each(map, function(e, _) {
o[e] = array[i++];
});
return o;
}
其工作原理如下:
var array = [1,2];
var _ = assign[array, { var1: null, var2: null });
_.var1; // prints 1
_.var2; // prints 2
但这真的很糟糕,因为 _ 没有任何意义。它只是一个空壳来存储名称。但遗憾的是它是必需的,因为 JavaScript 没有指针。从好的方面来说,您可以在值不匹配的情况下分配默认值。另请注意,此解决方案不会尝试对数组进行切片。所以你不能做类似的事情{first: 0, rest: 0}
。但是,如果有人想要这种行为,那很容易做到。
什么是更好的解决方案?