从Mozilla的JavaScript 1.7 changlog中可以看出,他们添加了解构赋值工具。可悲的是,我不是很喜欢的语法(为什么写a和b两次?):JavaScript中的解构赋值工作
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}
这样的东西。但是,如果有人想要这种行为,那很容易做到。
什么是更好的解决方案?
我同意的唯一的事情是,解构可能是一个更好的名字。 *来源,目的地是unix风格。 *填充全球范围是不好的。它不会导致组合性。 *将输出变量写入字符串会让您的编辑人员感到疲倦和困难。就像编写SQL一样。 – 2008-10-15 18:31:49
@AndersRuneJensen由于这模仿了一个赋值,因此目标应该几乎肯定在左边 - 就像`[var1,var2] = arr`。而`destructure`是一个可怕的,无意露出的名字。我认为`assign`更好 - 毕竟,这被认为是一个通用的效用函数。如果不是,那么也许`massAssign`? – 2014-06-27 19:36:12