什么时候可以在JavaScript中使用==?

Mai*_*pal 3 javascript equality operators

来自:http://www.2ality.com/2011/12/strict-equality-exemptions.html

JavaScript有两个运算符用于确定两个值是否相等:

  • 严格相等运算符===只考虑具有相同类型的相等值.
  • "正常"(或宽松)等式运算符==在比较严格相等之前尝试转换不同类型的值.

给初学者的建议是完全忘记==并始终使用===.

但是因为没有使用==运算符而导致它的原因是什么?它会导致安全风险吗?

但是使用typeof运算符我们可以确定结果将是一个字符串.然后==可以安全使用,因为我们可以确定它不会执行任何转换恶作剧:

if (typeof x == "function") {
    ...
}
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 7

==操作是确定代码时的舒适与正在发生的引擎盖下的隐式转换使用.这个过程虽然有时很直观,但是很明确.

但是我仍然会===在你提供的样本中使用.如果预计不会发生任何转换,那么使用==会给读者带来混乱.它说"我希望转换"实际上不会发生转换.您应该使用满足您正在寻找的条件的最具体的运算符

if (typeof x === "function") { 
  ...
}
Run Code Online (Sandbox Code Playgroud)


Spu*_*ley 5

如果您确定它不会按照您的示例进行任何“转换恶作剧”,那么是的,您仍然应该使用===,因为您将节省解析器的工作量,因为它不必确定它是否需要执行转换。所以你会得到更好的表现。(边缘,但仍然)

这与安全无关;它关乎性能,关乎以正确的方式做事。

您应该使用 double equal 的唯一时间是您事先知道您肯定想要使用 javascript 的隐式类型转换。例如,如果您想检查输入字段的数值(可能是字符串),则可能就是这种情况。但即便如此,在很多情况下,您最好先手动转换该值。

简而言之,===除非您确定需要==.

  • 当不需要进行转换时,`==` 和 `===` 之间没有性能差异。`===` 仍然会进行类型检查。如果类型不同,则返回 false。但它仍然进行类型检查。 (2认同)