Javascript 中断if语句
JSHint告诉我不要在Javascript 中断if语句,javascript,jshint,Javascript,Jshint,JSHint告诉我不要在if语句上使用标签(就JSHint而言,标签似乎只用于循环) 因此,我在上面的第一行得到了警告,但(自然)在break行也得到了警告 更新:此代码按预期工作,但显然不是实现最终结果的正确方法。它应该如何重构?好的,我正在测试这个清理过的解决方案 if (options.addToForm instanceof jQuery || options.addToForm === true) { if (options.addToForm === true) { op
if
语句上使用标签(就JSHint而言,标签似乎只用于循环)
因此,我在上面的第一行得到了警告,但(自然)在break
行也得到了警告
更新:此代码按预期工作,但显然不是实现最终结果的正确方法。它应该如何重构?好的,我正在测试这个清理过的解决方案
if (options.addToForm instanceof jQuery || options.addToForm === true) {
if (options.addToForm === true) {
options.addToForm = $(element).closest("form");
}
if (options.addToForm.length === 0) {
// No form found
options.addToForm = false;
}
}
if (options.addToForm !== false) {
$(element).each(function(index) {
// Do Stuff
});
}
您不能将传统的
语句从循环之外的if
语句中断开。您可以执行返回操作
,以结束函数执行。您正在使用中断
作为转到。这是非常危险的,会产生无法维护的代码。你听说过意大利面条代码吗?我们有一个很好的理由不再使用GOTO语句。你能描述一下你想做什么吗?可能是,但是我同意,如果知道是否有一种在没有警告的情况下使用break
功能的替代方法,那就太好了。关于这一点,有一个直接的问题我并不真正理解第一个if
语句。在原始版本中,只有当addToForm
不是jQuery对象时,才能通过。现在你正在做相反的事情。我想知道在原始版本中,您是否在错误的位置关闭了第二个if
。我想您的新版本更有意义。addToForm
可以是布尔值或jQuery对象。如果它是一个布尔值,我需要找到最接近的表单,但是如果最后没有元素,我就不能注入。不同之处在于,我的原始代码假设传入的对象是一个表单,而不检查其长度。是的,奇怪的是,.length
只检查了未传入的jQuery对象。现在你正在检查这两种情况。我可能会对Boolean和jQuery对象使用单独的属性,但这就是我。我更喜欢静态类型的系统,所以我有偏见@斜视我听到了,但我觉得这是js的力量,它不是强类型的事实应该被使用和利用,而不是被忽视。我在Java和一些cpp方面做了很多工作,所以强类型系统对我很有吸引力,但如果你的类型很弱,那么不妨用它来实现我心目中的目的。
if (options.addToForm instanceof jQuery || options.addToForm === true) {
if (options.addToForm === true) {
options.addToForm = $(element).closest("form");
}
if (options.addToForm.length === 0) {
// No form found
options.addToForm = false;
}
}
if (options.addToForm !== false) {
$(element).each(function(index) {
// Do Stuff
});
}