【问题标题】:Getting a JSLint warning concerning labels in Javascript获取有关 Javascript 中标签的 JSLint 警告
【发布时间】:2010-09-27 18:01:06
【问题描述】:

在我的 javascript 我有这个

    loopDeLoop:
        while (foo !== bar) {
            switch (fubar) {
                case reallyFubar:
                    if (anotherFoo == anotherBar) {
                        break loopDeLoop;
                    }
                    break;
                default:
                    break;
            }
        }

但是 JSLint 说... lint 警告:标签的使用

这是JSLint的笔记

标签
JavaScript 允许任何语句具有标签,并且标签具有单独的名称空间。 JSLint 更严格。

JSLint 只需要在与 break 交互的语句上使用标签:switch、while、do 和 for。 JSLint 期望标签与变量和参数不同。

如何构造上述内容以消除警告?

谢谢,
格雷格

【问题讨论】:

  • Shog9 和 EndangeredMassa 我很欣赏重构,但我并没有在我的问题中说清楚......我不关心循环的构造......这是我如何使用javascript中的标签?在我看来,我已经正确构建了它,但 JSLint 抛出警告“使用标签”所以我的问题是如何在 Javascript 中正确使用标签?或者更准确地说...我如何在 Javascript 中使用标签以使 JSLint 不会引发警告?...顺便说一句...代码在应用程序中运行并正常工作...

标签: javascript jslint


【解决方案1】:

您正确使用了标签。

JSLint 发出警告,因为 Javascript 中的标签风格非常糟糕,而 JSLint 希望您知道这一点。

重申一下,如果你使用标签,即使是正确的,JSLint 也会给出警告。

编辑: 看起来您可以使用 -use_of_label 配置指令禁用标签警告。

【讨论】:

  • 文档是否完全错误?它说它允许在某些地方这样做。
【解决方案2】:

很难提出建议,因为在您的示例中,两个循环和开关之间的关系是如何保持不透明的......但是您总是可以将隐式外循环转换为显式外循环,将内循环在闭包中:

while ( (function() // loop while function returns true
{
   while (foo !== bar) 
   {
      switch (fubar) 
      {
         case reallyFubar:
            if (anotherFoo == anotherBar)
            {
               return true; // back to outer loop
            }
            break;
         default:
            break;
       }
   }
   return false; // done looping
})()) {};

在诉诸像这样丑陋的东西之前,我可能会尝试将内部循环中隐含的任何算法分解为一个单独的函数。

【讨论】:

    【解决方案3】:

    您可以设置一个标志来确定您是否在循环中完成工作。

    var done = false;
    while (foo !== bar && !done) {
        switch (fubar) {
            case reallyFubar:
                if (anotherFoo == anotherBar) {
                    done = true;
                }
                break;
    
            default:
                break;
        }
    
        if(!done) {
            //If you have more logic inside the loop, put it here
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-04-22
      • 2010-11-18
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 2015-08-13
      • 2015-03-17
      • 2017-07-28
      • 2017-10-25
      相关资源
      最近更新 更多