【问题标题】:Why use === when you are sure types are equal?为什么在确定类型相等时使用 === ?
【发布时间】:2011-07-08 17:59:03
【问题描述】:

似乎尽可能首选严格相等运算符 - 我将代码放入 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% 确定,所以=== 只是一个多余的额外令牌。此外,在您知道类型始终相同的情况下检查类型也没有性能优势。

那么在这里使用=== 的真正原因是什么?

【问题讨论】:

    标签: javascript types equality jslint


    【解决方案1】:

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

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

    【讨论】:

    • 我可能很傻,但请告诉我选项页面在哪里有===/== 的选项?
    • 呃...它曾经拥有它。它被称为eqeqeq,但现在我找不到了。
    • 它曾经也在 JSlint 中。
    • Eqeqeq 在最近的 JSLint 重写中被删除。如果你真的想要它,你可以从 GitHub 获取旧版本的 jslint。
    【解决方案2】:

    这不是严格要求的,因为您知道length 函数已经过良好测试。但是如果length 有点问题,它有可能返回false 怎么办?

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

    【讨论】:

      【解决方案3】:

      嗯,=== 应该快得多,因为它可能会更快地失败(在类型不匹配时),但这在“毫无意义的微优化”领域的深处。

      实际上,我建议===,即使你有 105% 的把握 - 我已经被我的假设绊倒了太多次(“是的,我很肯定它们是......相同的...... ……呃……”)。除非有充分的理由关闭它们,否则最好在代码中启用健全性检查,而不是在脑海中相信它们。

      【讨论】:

        猜你喜欢
        • 2017-07-31
        • 1970-01-01
        • 2019-02-11
        • 2015-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-07
        相关资源
        最近更新 更多