ESLint выдает ошибку при попытке присвоить несколько переменных одному и тому же значению - PullRequest
1 голос
/ 29 мая 2020

Почему ESLint выдает Parsing error: Unexpected token , после a объявления переменной в этой строке кода?

const a, b, c = 1;

My .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"]
    }

}

1 Ответ

4 голосов
/ 29 мая 2020

Вы не можете сделать это в JS.

Если в объявлении переменной указано несколько переменных (var, let или const), каждое значение имеет свой собственный инициализатор, поэтому оно Невозможно присвоить одно значение нескольким переменным в одном операторе объявления без повторения.

Если инициализатор отсутствует (нет = value части), переменная будет установлена ​​в undefined.

Итак, если вы использовали let, тогда c будет 1, а a и b будут undefined:

let a, b, c = 1;

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

Однако пропуск инициализатора в объявлении const вызывает ошибку (не имеет большого смысла назначать undefined константе, верно?)

Следовательно, ваш код не работает (не только в ESLint, но и в любой JS среде выполнения, которая правильно реализует стандарт ECMAScript):

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...