Error handling JSLint错误:应为';忽略';而是看到';ex';

Error handling JSLint错误:应为';忽略';而是看到';ex';,error-handling,try-catch,jslint,Error Handling,Try Catch,Jslint,我一直在使用JSLint,但就在今天,我遇到了一个以前从未见过的错误。使用以下代码,我得到如下所示的错误: try { document.execCommand('BackgroundImageCache', false, true); } catch (ex) {} 错误: Expected 'ignore' and instead saw 'ex'. } catch (ex) {} 因此,我将代码更改为以下内容,错误消失了: try { document.execComma

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

try {

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

} catch (ex) {}
错误:

Expected 'ignore' and instead saw 'ex'.
} catch (ex) {}
因此,我将代码更改为以下内容,错误消失了:

try {

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

} catch (ignore) {}
我在互联网上找不到任何关于为什么这会修复错误的解释。有人知道发生了什么事或者为什么这样解决了问题吗

谢谢。

我想你是对的——杰斯林特过去没有这样抱怨过。相反,它告诉您需要使用
ex
,对吗?稍后我将检查github以查看和编辑此内容编辑:你的精彩绝伦!克罗克福德,JSLint的作者,在第3444行。他在jslint的源代码中使用了空的
catch
块,所以我猜他也必须给我们一些乱七八糟的东西

JSLint希望您将空
catch
块与
ignore
作为变量名混在一起,以便阅读代码的人清楚地看到,您故意意味着在
catch
块中不做任何事情。作为Crockford,他认为,“在使用难以区分明显错误的习惯用法时,编写正确的程序是很困难的。”

1.
ex
已使用(正常)

所以(我猜您知道)如果您编写此代码并使用
ex
,jslint不会抱怨

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

var spam;

try {
    spam = "spam";
} catch (ex) {
    window.alert(ex);
}
2.
ex
未使用表示
忽略
(也可以)

因此,如果你不想对
ex
做任何事情,他希望代码告诉人们你没有把
ex
等价物放在那里,把变量命名为
ignore

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

var spam;

try {
    spam = "spam";
} catch (ignore) {
}
3.
ignore
已使用(错误!)

因此,在典型的Crockfordian方式中,您现在不能使用
忽略
并在
捕获
块中实际执行某些操作

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

var spam;

try {
    spam = "spam";
} catch (ignore) {
    window.alert(ignore);
}
那就

意外的“忽略”<代码>}捕获(忽略){

Crockford的另一个超显式“不要编写看起来像错误的代码”


(旁白:当你谈论这个话题的时候,看看可能会很有趣。老实说,尽管基于这个讨论,
忽略
可能是一个有用的惯例(我的意思是,它包括飞碟争论空的
捕获
块!),我有点惊讶Crockford允许
ignore
kludge,因为上面的链接中的参数与他调用一些正则表达式“不安全”的参数非常相似

哇!很好的发现,很好的回答!非常感谢。我真的很想知道JSLint是否按照您提到的内容进行了更改,但我已经很久没有使用try-catch语句了,我不确定。再次感谢您的回答和链接。