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

Bee*_*jor 7 javascript comparison performance typeof undefined

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

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

我知道进行严格的比较会更快,但除非在极端情况下,性能增益应该是难以察觉的.另一个想法是,它只是更清晰,始终使用===,因为它不会引起问题类似像操作x == undefinedx === undefined.是否值得减少这些情况以==改进缩小和传输编码,或者是否更好===地保持运行时性能和一般清晰度?

小智 6

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

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

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

使用==
松散相等的松散相等将两个值转换为公共类型后,将两个值相等.

可以说,使用严格的比较应该稍微快一点,因为没有转换,但差别很小,无关紧要,微优化是一件非常糟糕的事情


编辑

根据文件11.9.311.9.6,如果它们是相同类型,则应该没有区别.