1

Firefox 3.5.3(至少)允许我编写如下代码:

var array = [4, 5, 6];
var foo, bar, baz;
[foo, bar, baz] = array;

在什么时候

foo => 4
bar => 5
baz => 6

这对于代码的清晰度非常有帮助。

这被认为是符合 ECMAScript 的吗?我没有在规范中看到任何内容,但 JSLint 返回错误。

4

1 回答 1

2

不,这是 JavaScript 1.7 中引入的一个称为解构赋值的特性。JavaScript 不是 ECMAScript。ECMAScript 是一些 JavaScript 特性的尝试标准化。只有两个 JavaScript 引擎:(Spider|Trace|Action)Monkey 和 Rhino。其他所有引擎都是 ECMAScript 引擎。

这里有些例子:

var {a, b} = {b:2, a:1}; // a === 1, b === 2
var [c, d] = [3, 4]; // c === 3, d === 4
var {x: e} = {x: 5}; //  e === 5
function f({a, b: c}, [d, e]) {
  // same as: var [{a, b: c}, [d, e]] = arguments
}

Opera 部分实现了一些解构赋值。它不支持对象或函数参数,但它支持您的简单示例。

于 2009-10-31T16:16:28.570 回答