Javascript 中断if语句

Javascript 中断if语句,javascript,jshint,Javascript,Jshint,JSHint告诉我不要在if语句上使用标签(就JSHint而言,标签似乎只用于循环) 因此,我在上面的第一行得到了警告,但(自然)在break行也得到了警告 更新:此代码按预期工作,但显然不是实现最终结果的正确方法。它应该如何重构?好的,我正在测试这个清理过的解决方案 if (options.addToForm instanceof jQuery || options.addToForm === true) { if (options.addToForm === true) { op

JSHint告诉我不要在
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
  });
}