8
通過knockout.js源代碼閱讀我來翻過this line爲什麼選項[「foo」] || options.foo?
disposeWhenOption = options["disposeWhen"] || options.disposeWhen
我以前從來沒有看到這一點,我知道一切關於JavaScript的說,有任何情況下,當||
雙方會有所不同。爲什麼淘汰賽團隊會使用這種構造?
通過knockout.js源代碼閱讀我來翻過this line爲什麼選項[「foo」] || options.foo?
disposeWhenOption = options["disposeWhen"] || options.disposeWhen
我以前從來沒有看到這一點,我知道一切關於JavaScript的說,有任何情況下,當||
雙方會有所不同。爲什麼淘汰賽團隊會使用這種構造?
這是由Closure Compiler執行符號修改的結果。從Closure Compiler docs:
關閉編譯器編譯永遠不會改變字符串文字在你的代碼,沒有 無論你用什麼編制水平。這意味着編譯 ADVANCED_OPTIMIZATIONS會根據您的 代碼是否使用字符串訪問屬性而對屬性進行不同處理。如果將字符串引用與屬性 與點語法引用混合在一起,則Closure編譯器會將某些引用重命名爲 而不是其他屬性。因此,您的代碼可能無法正確運行 。
使用點語法和字符串文字是「安全」的方式來解決這個問題,因爲它有助於確保客戶使用API的不導出一部分,而不是使用自己的代碼關閉編譯器會沒有任何問題。
這是不是隻是一個點表示符號與括號表示相同的參考嗎? –
我似乎無法理解這一點......它看起來多餘。 – elclanrs
@RUJordan,那爲什麼要用它?這顯然是一個非常好的調整方法,淘汰賽團隊是一個非常聰明的團隊。我懷疑這是一個疏忽。 –