为什么JSLint抱怨“return后意外的else”?

59

JSLint 抱怨以下(无意义的示例)代码无效:

(function (x) {
    "use strict";
    if (x === 1) {
        return 1;
    } else if (x === 2) {
        return -1;
    }
    return 0;
}(1));

错误: 在第4行第9个字符处存在问题:在return后面出现了意外的'else'。

return 1;

它是否认为在if / else结构中使用return语句是不好的?

它认为这个版本是可以的:

(function (x) {
    "use strict";
    var returnval = 0;
    if (x === 1) {
        returnval = 1;
    } else if (x === 2) {
        returnval = -1;
    }
    return returnval;
}(1));

6
如何在 JSLint 中禁用这个规则? - n s
3个回答

99
它只是告诉你在 return 后面加上 else 是多余的。下面这样就可以了:
(function (x) {
    "use strict";
    if (x === 1) {
        return 1;
    }  
    if (x === 2) {
        return -1;
    }
    return 0;
}(1));

56
没错,我个人更喜欢使用if-else链,因为这种方式更能清晰地表达代码的意图。 - Hal
3
在重构代码时,特别是当你决定只使用一个return语句时,这种方式非常有用。如果省略了else关键字就会出现错误。 - Sulthan

4
我发现使用jslint的时候,如果你遵守规则,其中50%是荒谬的,但对代码没有负面影响。另外50%左右会给你带来好处。因此,为了这另外50%,请这样做。这个特定的例子强制你明确条件的反义或类似的内容,而不是让else隐含地出现...if/else同理。

1
不同意。是的,50%的代码可能不会产生“没有负面影响”。但这仅涉及代码本身。考虑未来的维护、近期的调试时间以及其他不像你一样编码或不是高手的开发人员。 JSLint在其严格模式下为您提供了一种标准化的编码方式,使任何人都可以阅读/理解/编写代码,而不考虑经验/技能或时间。是的,它很严格,很难遵守,但当您的代码符合规范时,它就是一种“跨人类的代码”。 - MathKimRobin

1
最好让函数始终返回一些东西,因为这样会增加一致性。JSLint 很严格,会伤害程序员的感情。没办法。个人认为版本 1 没问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接