在JavaScript中,typeof x =='y'和typeof x ==='y'之间有什么区别吗?

时间:2015-06-12 22:38:09

标签: javascript performance comparison undefined typeof

我知道严格和松散比较运算符之间的区别。显然,x == yx === y不同。但每当我看到使用typeof的代码时,它始终使用===

如果typeof运算符始终求值为字符串(例如'boolean','number'等),则typeof x == 'y'typeof x === 'y'不会始终呈现相同的值结果?如果是这样,为什么要使用===

我知道进行严格的比较会更快,但除非在极端情况下,性能增益应该是难以察觉的。另一个想法是,总是使用===更加清晰,因为 导致类似操作的问题,例如x == undefinedx === undefined。是否值得将这些案例减少到==以改进缩小和转移编码,或者保持===以保持运行时性能和一般清晰度更好?

1 个答案:

答案 0 :(得分:6)

在这种情况下,无论如何都没有任何有用的区别。

  

typeof 运算符返回一个字符串,指示未评估的操作数的类型   https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof

我们知道它总是一个字符串,它只是一些预定义的值,因此在比较typeof的结果时没有显式理由使用strict运算符但是,严格比较运算符应该用于可读性,并避免任何可能的异常。

<强>但是

  

使用== 的松散平等   在将两个值转换为公共类型之后,松散相等性将两个值相等。

有人说,使用严格的比较应该稍微快一点,因为没有转换,但差别很小,不重要,micro optimizing is a very bad thing

修改

根据文档11.9.311.9.6,如果它们属于同一类型,则应该没有区别。