我知道严格和松散比较运算符之间的区别。显然,x == y
与x === y
不同。但每当我看到使用typeof
的代码时,它始终使用===
。
如果typeof
运算符始终求值为字符串(例如'boolean','number'等),则typeof x == 'y'
和typeof x === 'y'
不会始终呈现相同的值结果?如果是这样,为什么要使用===
?
我知道进行严格的比较会更快,但除非在极端情况下,性能增益应该是难以察觉的。另一个想法是,总是使用===
更加清晰,因为 导致类似操作的问题,例如x == undefined
与x === undefined
。是否值得将这些案例减少到==
以改进缩小和转移编码,或者保持===
以保持运行时性能和一般清晰度更好?
答案 0 :(得分:6)
在这种情况下,无论如何都没有任何有用的区别。
typeof 运算符返回一个字符串,指示未评估的操作数的类型 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof
我们知道它总是一个字符串,它只是一些预定义的值,因此在比较typeof的结果时没有显式理由使用strict运算符但是,严格比较运算符应该用于可读性,并避免任何可能的异常。
<强>但是强>
使用== 的松散平等 在将两个值转换为公共类型之后,松散相等性将两个值相等。
有人说,使用严格的比较应该稍微快一点,因为没有转换,但差别很小,不重要,micro optimizing is a very bad thing
修改强>