2014-05-07 101 views
6

的代碼在引導的微細化以及unminified JS文件的第一行間尋找,有一個直接的差異:爲什麼Javascript minifiers會將===轉換爲==?

// bootstrap.js 
if (typeof jQuery === 'undefined') { ... } 

// bootstrap.min.js 
if("undefined"==typeof jQuery)... 

(見自己:bootstrap.jsbootstrap.min.js

我很困惑,爲什麼這是允許的。我的(也許是天真的)理解是,===總是會帶來性能上的提升,並且經常可以防止出現意想不到的結果(例如,與0或""進行的虛假比較)。看起來文件大小的小增益在性能上會有損失,並可能導致錯誤的結果。任何人都可以在這裏放光?

+0

'typeof'總是返回一個字符串,所以'==='是不必要的。文件運行通過的縮小器或其他處理器可能已經認識到這一點。沒有可能導致錯誤的結果,即使這條線經常運行足以成爲瓶頸,任何性能差異都會被拋出。 – user2357112

+0

每個人都在沒有完全理解問題的情況下回答。 – ndugger

+5

@NickDugger不是真的;這個問題很清楚。只有當操作數不是相同類型時,'==='的性能優勢纔有意義。 – Pointy

回答

5

在您引用的特定代碼中,它是安全的,因爲兩個操作數的類型都是不變的,並且都是字符串。沒有可能的節省成本,因爲永遠不需要任何類型的強制。的==想象成這樣:

function ==(a, b) { // obviously this is fake 
    if (a === b) return true; 
    // type coercion ... 
} 

另外,我個人認爲應該使用===超過==的,因爲並沒有因爲性能語義差異。對於絕大多數人寫的代碼來說,這樣的微優化並不重要。 (這實際上是對jQuery的存在的檢查與一 typeof相比做了一些諷刺;這本身就是一個可疑地有價值的微型優化。) 哎呀錯了:)

+0

好的答案!只是想澄清其他讀者可能無法閱讀「//強制類型」是_de facto_' else'的僞代碼,而不是上面發生的事情的描述。 – Impirator

+0

@Impirator哦,是的,好點。我這樣寫就是爲了強調,如果在'==='比較規則下值相等,那麼工作就完成了。 – Pointy

0

typeof總會返回一個字符串,所以不需要擔心類型轉換。最終,這並不能真正節省文件或執行文件,但這被認爲是一個安全的假設。

相關問題