JSLint错误:预期'忽略'而是看到'前'

Har*_*San 18 error-handling jslint try-catch

我一直使用JSLint,但就在今天,我遇到了一个我从未见过的错误.使用以下代码,我收到如下错误:

try {

  document.execCommand('BackgroundImageCache', false, true);

} catch (ex) {}
Run Code Online (Sandbox Code Playgroud)

错误:

Expected 'ignore' and instead saw 'ex'.
} catch (ex) {}
Run Code Online (Sandbox Code Playgroud)

所以我将代码更改为以下内容,错误消失了:

try {

  document.execCommand('BackgroundImageCache', false, true);

} catch (ignore) {}
Run Code Online (Sandbox Code Playgroud)

我在互联网上找不到有关为什么会修复错误的任何解释.有谁知道这是什么,或为什么这解决了这个问题?

谢谢.

ruf*_*fin 30

我认为你是对的 - jslint不习惯这样抱怨.相反,它告诉你,你需要做点什么ex,对吧?我将检查github以便稍后查看和编辑. 编辑:很棒[由你]!JSLint的作者Crockford 在今年4月29日的第3444行添加了这个内容.他catch在jslint的源代码中使用空块,所以我猜他也必须给我们提供kludge.; ^)

JSLint的要你杂牌空catch与块ignore作为变量名,这样很明显的人阅读你的代码,你故意的意思不是在你做任何事情catch块.正如克罗克福德在其他地方所说的那样,他认为,"在使用难以与明显错误区分的习语时,很难编写正确的程序."

1.)ex使用(好的)

所以(我猜你懂的),如果你写的代码,并做一些事情ex,JSLint的不抱怨.

/*jslint browser: true, white:true, sloppy:true*/

var spam;

try {
    spam = "spam";
} catch (ex) {
    window.alert(ex);
}
Run Code Online (Sandbox Code Playgroud)

2.)ex未使用的手段ignore(也可以)

因此,如果你的意思是不做任何事情ex,他希望代码ex通过命名该变量来告诉那些你没有搞砸的人ignore.

/*jslint browser: true, white:true, sloppy:true*/

var spam;

try {
    spam = "spam";
} catch (ignore) {
}
Run Code Online (Sandbox Code Playgroud)

3.)ignore使用(错误!)

因此,在典型的Crockfordian时尚中,你现在无法使用ignore并且实际上在catch块中执行某些操作!

/*jslint browser: true, white:true, sloppy:true*/

var spam;

try {
    spam = "spam";
} catch (ignore) {
    window.alert(ignore);
}
Run Code Online (Sandbox Code Playgroud)

这给了

出乎意料的'忽略'. } catch (ignore) {

Crockford只是另一个超显式的"不要使代码看起来像一个错误".

(旁白:看看为什么空的捕获会在你讨论这个问题时阻止一个坏主意.可能很有趣.老实说,虽然ignore可能是一个有用的约定,基于讨论(我的意思是,它包括Skeet争论空catch块!),我有点惊讶Crockford允许ignorekludge,因为上面的链接有一些参数,感觉很像他称为一些正则表达式"不安全".)