我一直无法说服克罗克福德的一件事是允许案例陈述失败。
目前,这是可以的:
开关(富){
情况1:
案例2:
做一点事();
}
但这不是:
开关(富){
情况1:
先做某事();
案例2:
做一点事();
}
在我之前破解的 JSLint 版本中,我检查了评论 /_falls through_/ 以表明您打算失败:
开关(富){
情况1:
先做某事();
/_跌倒_/
案例2:
做一点事();
}
我真的很想看到它包含在 JSHint 中,因为很长一段时间以来,JSLint 一直让我感到痛苦。
此外,从#11 - JSHint 可能应该有一个选项,允许一直到default
。
由于案例失败通常是无意的,因此我没有添加单独的选项来忽略该消息。 相反,我用一个明确的评论重新使用了你的方法,说失败是故意的。
开关(富){ 情况1: 剂量(); /* 掉线 */ 案例2: 剂量(); }
相关提交:4a72da1。
太好了,谢谢!
IIRC,克罗克福德在他的书中特别提到了为什么他不喜欢案例失败。 这个故事既有趣又有些自嘲。
很抱歉对此发表评论,但仍然会为case
触发警告,并在块的末尾抛出一个 throw。 您可以使用/* falls through */
注释禁用警告,但注释会被前一种情况、注释和下一种情况之间的空白以外的任何东西“干扰”(从某种意义上说,警告毕竟会被触发)案例所以我什至无法评论为什么评论在那里。
/* falls through */
注释而不是break;
是一个未记录的功能。 请将其添加到文档中。
可以在/* falls through */
之前的一行中添加其他注释。
借调。 请在文档中添加/*falls through*/
。
另外,请添加支持:
case 'none':
default:
虽然从技术上讲'none'
大小写是不必要的,但它确实增加了代码的可读性。
+1 用于向文档添加有关此的信息。
作为一个兴趣点,我最近发现了一种“失败”案例的情况。 我用它来执行从 localStorage 读取的版本化数据的迁移。 前任:
function migrate( version, data ) {
switch( version ) {
case 1 :
data.new1 = data.old; // convert data from version 1 to version 2
delete data.old;
case 2 :
data.new2 = data.new1; // convert data from version 2 to version 3
delete data.new1;
}
return data; // return data in version 3 format
}
随着数据格式的发展,可以通过添加迁移旧版本的案例来维护代码,并应用所有将特定版本升级到最新版本的迁移。
对于那些寻找.jshintrc
对象键的人:
"-W086": true, //allow fall-through
最有用的评论
对于那些寻找
.jshintrc
对象键的人: