似乎必须尽可能使用严格相等运算符 - 我将代码放在JSLint中并获得以下反馈。
代码:
function log() {
console.log(arguments.length == 1 ? arguments[0] : arguments);
}
来自JSLint的反馈:
Problem at line 2 character 34: Expected '===' and instead saw '=='.
我很想知道===
对==
的优势在于.length
。基本上,Number
返回1
,Number
也是===
。您可以100%确定,因此===
只是一个冗余的额外令牌。此外,在您知道类型总是相同的情况下检查类型也没有性能优势。
那么在这里使用{{1}}的原因究竟是什么呢?
答案 0 :(得分:4)
唯一的原因是你不必考虑你所做的比较是否会涉及强制。如果你坚持使用===
,你只需要担心一件事。
当然not everyone agrees。这就是为什么你可以在JSlint中disable specific checks,如果你确定你在做什么。
答案 1 :(得分:1)
并非严格要求,因为您知道length
功能已经过充分测试。但是,如果length
有点错误,并且有可能返回false
怎么办?
在这种情况下,使用0
比较将false
和==
评估为false。要测试false(当还有0
被返回的可能性时),您还需要检查数据类型,即===
的来源。
答案 2 :(得分:1)
嗯,===
应该是无限快的,因为它可以更快地失败(在类型不匹配时),但这在“毫无意义的微观优化”领域内部。
实际上,我建议===
,即使你有105%肯定 - 我被我的假设绊倒了太多次(“是的,我很肯定他们是......同样的......呃......“)。除非有充分的理由将其关闭,否则最好在代码中启用完整性检查而不是信任,以便在您的脑海中执行这些检查。