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,因为上面的链接有一些参数,感觉很像他称为一些正则表达式"不安全".)
| 归档时间: |
|
| 查看次数: |
4746 次 |
| 最近记录: |