问题:在评估JavaScript中的相等或身份时,操作数顺序是否有所不同?
在代码中,(0 == value)比更快还是更正确(value == 0)?(请注意,此问题对于身份运算符同样有效===.)
由于相等和同一性运算符都是可交换的,我不认为操作数顺序应该对评估性能产生影响,除非在计算等式算法本身时对左侧文字有一些固有的好处.我想知道的唯一原因是我最近使用Google的Closure Compiler来编写一些JavaScript,并注意到了这一点
if (array.length == 0 && typeof length === 'number') {
已编译成
if(0 == b.length && "number" === typeof c) {.
在两个相等的表达式中 - 一个松散和一个严格的闭包已经颠倒了我的操作数的顺序,在它们各自的表达式的左侧放置了一个数字文字和一个字符串文字.
这让我很好奇.
我通读了ECMAScript 5.1语言规范的Equality Operators部分(第11.9节,第80-82页),发现虽然等式算法首先检查左侧操作数,但没有迹象表明使用它更快或更好作为该操作数的文字.
有没有关于ECMAScript的类型检查,使文字检查最佳?它可能是Closure编译器中的一些优化怪癖吗?或者可能是旧版ECMAScript的相等算法中的实现细节,该算法在此较新版本的规范中已被取消?