【问题标题】:Expected an identifier and instead saw '...'需要一个标识符,而是看到“...”
【发布时间】:2019-05-07 15:41:27
【问题描述】:

jslint 中出现此错误,我该如何解决?

const {
    width,
    height,
    ...options
} = opts;

完整代码:

https://jsfiddle.net/zt7anuL3/18/

该行所在的代码部分:

function initPlayer(wrapper) {
    const video = wrapper.querySelector(".video");
    let settings = {};
    const {
        width,
        height,
        ...options
    } = opts;
    settings.width = width || 198;
    settings.height = height || 198;
    settings.playerVars = options.playerVars || options;
    videoPlayer.init(video, settings);
}

【问题讨论】:

  • 你可能想使用 eslint
  • 是的,jsLint 确实落后于时代,改用 esLint 是我的建议。

标签: javascript jslint


【解决方案1】:
const {
        width,
        height,
        ...options
    } = opts;

这分配了 3 个新的 const,width 具有来自 opts 的 width 属性的值,height 具有 height 属性的值,并且具有 ... 运算符的选项从 opts 对象中解构剩余的属性,没有宽度和高度。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

您需要新的 linting 规则来支持解构,因为此语句没有任何问题。

【讨论】:

    【解决方案2】:

    这是因为...实际上是在spread syntax中的JavaScript中使用的。改成这样:

    const {
        width,
        height,
        options
    } = opts;
    

    你的代码应该可以工作。

    编辑:

    正如 Keith 在下面的 cmets 中所说,可能只是你的 linter JSLint 坏了。

    【讨论】:

    • 您的代码中可能还会出现其他 ...。全部找到并替换它们。
    • ... 没有任何问题,它用于解构对象的其余部分。
    • 哦 - 我以为它是由于扩展运算符而损坏的。那么为什么解构不起作用呢?
    • 好的@Keith我会用这些信息编辑我的答案。
    • 这不是扩展语法(没有扩展运算符),它是destructuring assignment。省略号 ... 是一个标点符号,在这种情况下,它更接近于 rest 参数语法。从...options 中删除省略号会显着改变赋值语句的结果。
    猜你喜欢
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多