var a,b,c;
var arr = [1,2,3];
[a,b,c] = arr;
此代码在Firefox中完美运行,结果是a = 1,b = 2和c = 3,
但它在Chrome中不起作用。它是Chrome bug还是
它不是有效的JavaScript代码? (我在javascript引用中找不到它)
如何修改此代码以使其适用于Chrome,对其造成的损害最小?
(我真的不想写a = arr [0]; b = arr [1] ...或者一直使用arr.shift()#
P.S。这只是一个示例代码,在实际代码中 我从代码之外的某个地方获取了arr数组
答案 0 :(得分:82)
这是JavaScript 1.7的一项名为Destructuring assignment的新功能:
解构赋值可以使用反映数组和对象文字构造的语法从数组或对象中提取数据。
对象和数组文字表达式提供了一种创建临时数据包的简便方法。一旦创建了这些数据包,就可以按照自己的方式使用它们。你甚至可以从函数中返回它们。
使用解构赋值可以做的一件特别有用的事情是在单个语句中读取整个结构,尽管您可以使用它们执行许多有趣的操作,如下面的示例部分所示。 / p>
例如,您可以使用解构赋值来交换值:
var a = 1; var b = 3; [a, b] = [b, a];
此功能类似于Perl和Python等语言中的功能。
不幸的是,根据this table of versions,Chrome 1.7尚未实现。但它应该存在于:
在这个jsfiddle中尝试自己:http://jsfiddle.net/uBReg/
我在Chrome(失败),IE 8(失败)和FireFox 5(根据wiki表工作)中进行了测试。
答案 1 :(得分:7)
只有Javascript 1.7才有可能由@Justin回答。以下是在广泛使用的浏览器中进行模拟的试用版:
function assign(arr, vars) {
var x = {};
var num = Math.min(arr.length, vars.length);
for (var i = 0; i < num; ++i) {
x[vars[i]] = arr[i];
}
return x;
}
var arr = [1, 2, 3];
var x = assign(arr, ['a', 'b', 'c']);
var z = x.a + x.b + x.c; // z == 6
我不知道它有多有用。