【问题标题】:The rest syntax is not working in Chrome 49其余语法在 Chrome 49 中不起作用
【发布时间】:2019-08-02 23:41:43
【问题描述】:

由于某些依赖原因,我正在使用带有 Chrome 49.0.2623.75(64 位)的 Windows XP。我正在使用 ECMAScript 中的 rest 运算符,但它给出的错误是“未捕获的语法错误:意外的令牌 ...”此代码在最新的 Chrome 版本中运行。有没有办法或依赖项在 Chrome 49 的代码下面运行。我的代码写在下面。

this.dict = this.header.reduce((obj, k, i) => ({...obj, [k]: this.class[i] }), {})

【问题讨论】:

  • 您需要使用转译器。旧版浏览器只是不支持 2018 年指定的语言功能。
  • 供参考,Chrome 49 于 2016-03-02 发布

标签: javascript google-chrome


【解决方案1】:

无法在不受支持的浏览器中使用原生的 ES6“扩展”运算符 (...)。没有 1:1 的 polyfill(比如 Array.prototype 方法)。

您的选择包括:

  1. 使用像 webpack 这样的捆绑工具结合 babel 来解析 ES6 并输出符合您的浏览器客户端的 ES5。

  2. 使用“apply”的用法手动换出“spread”运算符。以this article 为例。此外,the MDN page on the rest operator 有一个示例,说明如何将“应用”的使用交换为“扩展”运算符,您可以手动反转这些示例。

附加背景:

“rest/spread”运算符是在 ES6 / ES2015 中添加的“syntactic sugar”工具(as discussed in this article,该版本的 JavaScript 由两个名称引用)。它的命名有点令人困惑,因为有时它被称为“rest parameter”或“spread syntax”。 “Spread Syntax”和“Spread Operator”可能是引用此运算符的最容易识别的方式,因为它包括所有用例,而“rest parameter”通常仅指在传递的参数中使用...的用例到一个函数。

【讨论】:

  • 要清楚(并帮助可能想要进一步搜索的人),这实际上是使用扩展语法,而不是其余语法。
  • 对象字面量的 rest/spread 并不是 ES6 (2015) 的一部分,而是 ES2018 的一部分。
  • 根据这篇文章,ES2015中似乎添加了Spread operator/rest参数:exploringjs.com/es6/…
  • @HereticMonkey 感谢您的反馈,添加了澄清研究
  • @CalebJay 不适用于对象文字。阅读您链接的 MDN 文章。
【解决方案2】:

如果可以修改代码可以使用Object.assign()

this.dict = this.header.reduce((obj, k, i) => Object.assign(obj, { [k]: this.class[i] }), {})

Browser compatability

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多