3

背景

我指的是...运营商。许多人喜欢并支持执行以下操作的想法:

const obj = { "hello": 1 };
const obj2 = { "world": 2, ...obj };

问题

我个人喜欢这种语法而不是典型的Object.assign,但最近当我开始在我的项目中使用它时,我遇到了这个 eslint 错误:

Object Spread - Parsing error: Unexpected token

可以在以下链接中看到解决方案:

这里的问题是,要使用这样的语法,我们需要experimentalObjectRestSpread在 eslint 上启用标志。此标志伴随着以下警告:

ExperimentObjectRestSpread - 启用对实验对象休息/传播属性的支持(重要提示:这是一项实验性功能,将来可能会发生重大变化。建议您不要编写依赖此功能的规则,除非您愿意在此功能时产生维护成本变化。)

验证提案后,我意识到它处于第 3 阶段:https ://github.com/tc39/proposal-object-rest-spread

有关不同阶段的更多信息,请参见此处:

问题

  • S3 中向后兼容性更改的概率是多少?
  • S3 撤回了多少提案?
4

1 回答 1

4

S3 中向后兼容性更改的概率是多少?

低而不返回第 2 阶段(见下一个问题)。

S3 撤回了多少提案?

这种情况很少见,但确实会发生。例如,装饰器在一段时间内处于第 3 阶段,但已回滚到第 2 阶段。类似地,类字段处于第 3 阶段,但在 11 月移回第 2 阶段(此后又被拆分 [再次],其中类公共实例Fields & Private Instance Fields提案又回到了 Stage 3,将静态类字段和私有静态方法留在 Stage 2)。

您可以通过查看https://github.com/tc39/proposals的 README.md 上的历史来了​​解事情是如何发展的。不过,这可能有点痛苦。

在 ECMA 的第 3 阶段使用提案在统计上是否安全?

这取决于您所说的“统计安全”是什么意思。如果您想要高度确定性,请将自己限制在第 4 阶段。

特别是关于对象休息/传播,它在 Chrome 中的 V8 发布和 Firefox 中的 SpiderMonkey 发布的当前版本中实现(而不是在标志后面)。在这里试试:

const a = {answer: 42};
const b = {question: "Life, the Universe, and Everything", ...a};
console.log(b);

11月TC39 会议的第一天,状态更新为:

KCL:Object spread 能否进入 es2018?

BT:如果有人可以进行 PR 并将其列入 1 月份的议程,那么我们可以将其加入。

...这听起来像是 1 月份的第 4 阶段。

于 2018-01-08T12:08:39.397 回答