javascript - 尝试将多个变量分配给相同的值时,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"]
}
}
解决方案
你不能在 JS 中这样做。
如果在一个变量声明中列出了多个变量(要么var
,let
要么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
推荐阅读
- typo3 - 有没有办法在 RTE 链接向导中包含自定义用户类?
- batch-file - 当我在我的 DBML 文件上运行 msxsl.exe 时,它会引入回车符,这会弄乱最后的 SQLMetal.exe 步骤
- sql - 我缺少什么加入条件
- oracle - Toad:自动在两个 Oracle 表之间进行每日传输?
- javascript - 为什么 useEffect 不再运行我的 API 提取并将结果保存到状态?
- zend-framework - LUCENE FULLTEXT INDEX (Orientdb / Lucene) 上的十进制范围搜索查询
- javascript - 在 NodeJS 中过滤和排序文档数组
- sql - 提取 XML 数据并输出到文件以保存在文件夹中
- sql - WHEN 语句中具有多个 LIKE 和 NOT LIKE 的 SQL 查询
- c# - 无法使用c#运行命令