首页 > 解决方案 > 尝试将多个变量分配给相同的值时,ESLint 会引发错误

问题描述

为什么 ESLint 会在这行代码中抛出一个Parsing error: Unexpected token ,after变量声明?a

const a, b, c = 1;

我的.eslintrc.json样子是这样的;

{

    "env": {
        "browser": true,
        "es6": true,
        "jquery": true,
        "commonjs": true
    },
    "extends": [
        "airbnb-base",
        "prettier"
    ],
    "parserOptions": {
        "ecmaVersion": 6,
        "sourceType": "script"
    },
    "plugins": ["prettier"],
    "rules": {
        "prettier/prettier": "error",
        "semi": ["error", "always"],
        "quotes": ["error", "double"]
    }

}

标签: javascripteslint

解决方案


你不能在 JS 中这样做。

如果在一个变量声明中列出了多个变量(要么varlet要么const),每个值都有自己的初始化器,所以不可能在一个声明语句中为多个变量分配一个值,而不重复。

如果缺少初始化程序(不= value存在任何部分),则变量将设置为undefined.

所以如果你使用let, thenc会变成1, whilea并且b会变成undefined:

let a, b, c = 1;

console.log(a, b, c) //undefined undefined 1

但是,在声明中省略初始化程序会引发错误(分配给常量const没有太大意义,对吧?)undefined

因此,您的代码会失败(不仅在 ESLint 中,而且在任何正确实现 ECMAScript 标准的 JS 运行时中):

const a, b, c = 1; //SyntaxError

要将相同的值分配给多个变量,您必须:

  • 重复该值(如果该值是对象文字(包括数组文字和函数表达式)或由构造函数、工厂或非纯函数返回,这将不起作用):

    const a = 1, b = 1, c = 1;
    
    console.log(a, b, c) //1 1 1

  • 彼此分配变量(提示:将具有最短名称的变量放在第一位并重复该变量):

    const a = 1, b = a, c = a;
    
    console.log(a, b, c) //1 1 1

  • 使用let

    let a, b, c;
    a = b = c = 1
    
    console.log(a, b, c) //1 1 1

  • 解构一个无限迭代器(这在变量非常多的情况下似乎很有用):

    const [a, b, c] = (function*(v){while(true) yield v})(1);
                                                       // ^--- Value
    
    console.log(a, b, c) //1 1 1


推荐阅读