【问题标题】:prefer-destructuring fix not working [duplicate]首选解构修复不起作用[重复]
【发布时间】:2018-08-03 02:24:28
【问题描述】:

相关:How to fix Eslint error "prefer-destructuring"?

我有:

method (v100) => {
    let L,
        H;
    if (v100 <= 70) {
        const obj = {L: 1, H: 2};
        L = obj.L;
        H = obj.H;
    } else {
        L = ((0.8353 * (v100 ** 2)) + (14.67 * v100)) - 216;
        H = ((0.1684 * (v100 ** 2)) + (11.85 * v100)) - 97;
    }
    return ((L - 40) / (L - H)) * 100
}

改成

{ L } = obj;
{ H } = obj;

如答案中所写。但是现在我收到了一个意外的令牌错误。

应该也可以这样写吧?:

{ L, H } = obj;

【问题讨论】:

  • 如前所述,它会引发意外的令牌错误
  • 尝试({ L, H } = obj); 不将花括号视为块。
  • @destoryer 这已修复,谢谢!将其添加为答案并提供更多解释,我将接受并投票
  • @31piy 添加了更多代码以使错误可重现
  • 为了简单起见,我真的建议使用const obj = {L: 1, H: 2}; const {L, H} = v100 &lt;= 70 ? obj : {L: 0.8353 * v100**2 + 14.67 * v100 - 216, H: 0.1684 * v100**2 + 11.85 * v100 - 97};

标签: javascript ecmascript-6 eslint


【解决方案1】:

试试:

({ L, H } = obj);

引用MDN web docs

使用没有声明的对象字面量解构赋值时,赋值语句周围的圆括号( ... ) 是必需的语法。

{a, b} = {a: 1, b: 2} 不是有效的独立语法,因为左侧的 {a, b} 被视为块而不是对象字面量。

但是,({a, b} = {a: 1, b: 2}) 是有效的,var {a, b} = {a: 1, b: 2} 也是如此

注意:您的( ... ) 表达式需要以分号开头,否则它可能用于执行上一行的函数。

【讨论】:

    猜你喜欢
    • 2018-01-25
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    相关资源
    最近更新 更多