来自:http://www.2ality.com/2011/12/strict-equality-exemptions.html
JavaScript有两个运算符用于确定两个值是否相等:
- 严格相等运算符===只考虑具有相同类型的相等值。
- “正常”(或宽松)等于运算符==在比较严格相等之前尝试转换不同类型的值。
给予JavaScript初学者的建议是完全忘记==并始终使用===。
但是为什么不使用==运算符会让它感到惊讶?这会导致安全风险吗?
但是使用typeof运算符我们可以确定结果将是一个字符串。然后==可以安全使用,因为我们可以确定它不会执行任何转换恶作剧:
if (typeof x == "function") {
...
}
答案 0 :(得分:7)
当代码适应隐藏的转换时,==
运算符可以使用。这个过程虽然有时很直观,但是很明确。
但是,我仍然绝对会在您提供的示例中使用===
。如果预计不会进行任何转换,那么使用==
会给读者带来混乱。它说“我希望转换”实际上不会发生转换。您应该使用满足您正在寻找的条件的最具体的运算符
if (typeof x === "function") {
...
}
答案 1 :(得分:2)
如果您确定它不会执行任何“转换恶作剧”,根据您的示例,那么是的,您仍然应该使用===
,因为您将节省解析器必须确定是否需要进行转换。所以你会获得更好的表现。 (边缘,但仍然)
这与安全无关;这是关于绩效和以正确的方式做事。
你应该使用双倍相等的唯一时间是你事先知道你肯定想要使用javascript的隐式类型转换。例如,如果要检查输入字段的数值(可能是字符串),则可能就是这种情况。但即便如此,在很多情况下,最好先手动转换值。
简而言之,除非您确定需要===
的隐式转换功能,否则请在所有地方使用==
语法。
答案 2 :(得分:1)
当我最初阅读您的问题时,我想到了两种情况:
但我做了一些阅读并遇到了this,这是一个非常强大的案例,从不使用==。我想这取决于你的意图,如果你想要一个快速(并且可以说是令人讨厌的)捕获所有然后使用==,但它可能更好的实践(和一些额外的工作)来实现显式比较。
答案 3 :(得分:0)
如果它们都是字符串,则没有理由不来使用===。
==不推荐,因为您可能忘记在这种情况下使用'typeof',或者您可能根本没有意识到这些类型无法“自然地”进行比较...当然您仍然可以使用它,但如果你真的需要来比较不同的类型,并了解这些类型的结果是真/假,你应该真的只使用它