【问题标题】:Are Arrays as lvalues in JavaScript ECMAScript-compliant?数组是 JavaScript ECMAScript 中的左值吗?
【发布时间】:2009-10-31 15:51:29
【问题描述】:

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 返回错误。

【问题讨论】:

  • 我想知道这是否合乎逻辑……关于 LHS 分配等部分似乎不合逻辑

标签: javascript arrays lvalue ecma262


【解决方案1】:

不,这是 JavaScript 1.7 中引入的一个名为 destructuring assignment 的功能。 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 部分实现了一些解构赋值。它不支持对象或函数参数,但它支持您的简单示例。

【讨论】:

  • 啊。我想这将是一个更新的功能。而且由于尚未完全支持 1.7,我想我必须坚持使用更详细的选项。谢谢!
  • 迟到的评论,但我正在搜索这个主题。解构分配是为现已废弃的 ECMAScript 第 4 版计划的一项功能。有点遗憾它没有进入 ECMAScript 5。
  • 看起来它在 ecmascript 的桌面上:harmony wiki.ecmascript.org/doku.php?id=harmony:destructuring
  • 我很确定他指的是 ECMAScript 3,所以我做出了相应的回答。我同意我应该提到它是和谐的,虽然我什至不确定它是否是,回到我一年前发布的时候。
猜你喜欢
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 2020-03-21
  • 1970-01-01
  • 2018-10-14
  • 2015-08-26
  • 2017-10-18
相关资源
最近更新 更多