2

当我发现可选链接?.)时,我正在编写一些 Javascript。我决定在我正在编写的一些代码中需要它。当我完成输入代码时,我注意到 JSHint 给了我一个错误,指出Expected an identifier and instead saw '.'. (E030) jshint(E030). 以下代码运行时没有任何错误(MDN 兼容性表),但 JSHint 仍然会给出警告。

var x = {
  y: {
    z: 123
  }
};

console.log(x.y?.z)

我发现了另一个与此相关的StackOverflow 问题,但该问题专门询问 ESLint,而这个问题是关于 JSHint。我还搜索了 JSHint GitHub 存储库的问题选项卡,但我找不到任何东西。有没有办法抑制这种错误?我正在使用 Visual Studio Code Insiders。

编辑信息取自Code - Insiders > About Visual Studio Code - Insiders

Version: 1.48.0-insider
Commit: d13d2fc56da7a2f8bcad4256212db0661fcbba45
Date: 2020-08-05T05:26:44.946Z (20 hrs ago)
Electron: 7.3.2
Chrome: 78.0.3904.130
Node.js: 12.8.1
V8: 7.8.279.23-electron.0
OS: Darwin x64 19.5.0
4

3 回答 3

3

在https://github.com/jshint/jshint/issues/3448中存在一个问题。

它建议“您可以使用ignore:start/ignore:endignore:line指令使 JSHint 传递它无法识别的任何语法。”

于 2020-08-08T05:32:46.813 回答
1

添加:"esversion": 11到您的 jshint 文件中。版本 11 中添加了可选链接。

于 2021-09-01T16:38:04.667 回答
0

通过 yarn 升级时似乎不起作用

node -v
v16.2.0

.jshint 在项目文件夹中

cat .jshintrc 
{
    "-W138": true,
    "-W083": true,
    "esversion": 11
}

来自 package.json:

"grunt-contrib-jshint": "^3.0.0",
"jshint": "^2.13.1",

来自 gruntfile.js

jshint: {
    options: {
        "-W138": true,
        "-W083": true,
        "jshintrc": true,
        esversion: 11
    },
    files: ['src/js/**/*.js']
},

结果:

grunt jshint:files
if (response?.errCode != 200) {
             ^ Expected an identifier and instead saw '.'.

一些调查:

node_modules/grunt-contrib-jshint/node_modules/jshint/package.json
"repository": {
    "type": "git",
    "url": "https://github.com/jshint/jshint.git"
},

在存储库中是正确的(2.13.1)版本的 jshint,但在我的项目中它没有更新(仍然有 2.12.0)

解决方案#1:

throw new Exception(response?.errMessage); /* jshint ignore:line */

解决方案#2:

cd node_modules
cp -Rp jshint grunt-contrib-jshint/node_modules/
于 2021-09-19T17:30:44.637 回答