为什么在确定类型相同时使用===?

时间:2011-03-04 11:00:29

标签: javascript types equality jslint

似乎必须尽可能使用严​​格相等运算符 - 我将代码放在JSLint中并获得以下反馈。

代码:

function log() {
    console.log(arguments.length == 1 ? arguments[0] : arguments);
}

来自JSLint的反馈:

Problem at line 2 character 34: Expected '===' and instead saw '=='.

我很想知道=====的优势在于.length。基本上,Number返回1Number也是===。您可以100%确定,因此===只是一个冗余的额外令牌。此外,在您知道类型总是相同的情况下检查类型也没有性能优势。

那么在这里使用{{1}}的原因究竟是什么呢?

3 个答案:

答案 0 :(得分:4)

唯一的原因是你不必考虑你所做的比较是否会涉及强制。如果你坚持使用===,你只需要担心一件事。

当然not everyone agrees。这就是为什么你可以在JSlint中disable specific checks,如果你确定你在做什么。

答案 1 :(得分:1)

并非严格要求,因为您知道length功能已经过充分测试。但是,如果length有点错误,并且有可能返回false怎么办?

在这种情况下,使用0比较将false==评估为false。要测试false(当还有0被返回的可能性时),您还需要检查数据类型,即===的来源。

答案 2 :(得分:1)

嗯,===应该是无限快的,因为它可以更快地失败(在类型不匹配时),但这在“毫无意义的微观优化”领域内部。

实际上,我建议===,即使你有105%肯定 - 我被我的假设绊倒了太多次(“是的,我很肯定他们是......同样的......呃......“)。除非有充分的理由将其关闭,否则最好在代码中启用完整性检查而不是信任,以便在您的脑海中执行这些检查。