Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何改善既有 JS 代码:修复常见的 ESLint 报警(三) #91

Open
cssmagic opened this Issue Jul 27, 2018 · 0 comments

Comments

Projects
None yet
1 participant
@cssmagic
Copy link
Owner

cssmagic commented Jul 27, 2018

前言

ESLint 是目前最主流、最强大的 JS 代码校验工具。当我们的代码触发了 ESLint 的报警规则时,ESLint 就会提示错误。

本系列文章将详细讲解那些需要手工介入修复的 ESLint 规则,帮助你顺利地把既有代码迁移到 ESLint 的保护之中。

no-empty

禁止出现空代码块,比如 if/else/for/catch 等代码块都在报警之列。

比如下面这个判断语句,if 块就是空的:

if (foo) {

} else {
    bar()
}

我们把判断条件反转一下,就可以消灭掉空的 if 块了。代码还更简练些:

if (!foo) {
    bar()
}

在某些情况下,判断条件反转之后并不易读,则可以添加注释来打破 “空代码块” 的状态:

if (foo) {
	// do nothing
} else {
    bar()
}

你可能意识到了:代块码中只有注释存在,就不算是 “空” 的。因为这条规则的用意还是希望你把代码意图表达清楚,既然你在空代码块中写注释了,那说明你已经在解释这个空代码块存在的意义,ESLint 就没有必要报警了。

try/catch 来说也是一样。代码中的 “静默失败” 通常会写成这样(这里 catch 块是空的):

try {
    bar()
} catch (e) {}

代码行为本身并没有什么问题,但读代码的人并不一定知道你的意图是静默失败,他可能会误以为这段代码没写完。所以你需要显式地说明你的意图。同样,加个注释就行:

try {
    bar()
} catch (e) {
    // 静默失败
}

no-empty-function

禁止出现空函数。

代码中为什么会出现空函数?很可能是没写完,你只声明了这个函数,但还没来得及实现。如果是这种情况,直接补完就好了。

还有另一种情况,你确实需要一个啥也不做的函数,类似于 jQuery / Underscore / LoDash 中的 .noop()。出现这个需求的场景可能是这样的:某个函数接受一个回调函数作为参数,你往往会准备一个空函数作为参数的默认值。

此时,空函数的存在是合理的。那么问题来了,如何抑制这条规则的报警?

我真的需要一个空函数

如果你的项目本身就依赖上面提到的类库,那不如直接使用它们提供的 .noop() 函数。

如果需要自己写,则可以通过注释来表明意图:

function noop() {
	// do nothing
}

这样就可以规避 “空” 函数的存在。

空函数作为参数默认值

如果你有兴趣的话,还可以进入实际的代码之中,看看案发现场有没有什么线索。我们来看个例子…………

……

……


完整文章在 “CSS魔法” 公众号首发,微信扫码立即阅读:

weixin-post-qr-code


© Creative Commons BY-NC-ND 4.0   |   我要订阅   |   我要打赏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.