2012-08-10 39 views
3

當我看到如何檢測是否腳本在node與運行在瀏覽器上運行的例子,我看到類似的邏輯:在node.js中,`module`總是一個對象嗎?

if (typeof module !== 'undefined' && module.exports) { 
    // do something that applies to node 
} else { 
    // do something that applies to browser 
} 

node docs列表中的全局module作爲一個{Object}我相信手段typeof module應始終爲"object"。這在節點中總是正確的嗎?如果是這樣,做檢測邏輯更有意義,例如:

if (typeof module === 'object' && module.exports) { 
    // do something that applies to node 
} else { 
    // do something that applies to browser 
} 
+0

我想說,在這種情況下,兩種形式在功能上是等同的。鑑於此,我會選擇兩者中較爲常見的方式來改進[代碼質量的一個真實指標](http://www.osnews.com/story/19266/WTFs_m) – bkconrad 2012-08-10 21:14:44

回答

4

是的,在目前爲止的所有節點版本中,module始終是一個對象,並且可能會保留所有0.x版本的方式。至於檢查它是否具體是一個對象而不是未定義是否有意義,這主要是一個風格問題。在前面的例子中,由於代碼可能只是真正關心向module.exports添加屬性,因此代碼更具表現力且更脆弱。例如,在未來版本的節點中,可能module成爲一個函數。在這種情況下,前面的例子仍然有效,而後面的例子需要稍微改變。

3

第二個代碼片段可能會正常工作。但是,不,我不認爲它更有意義。你關心它的存在比你關心的更重要。在javascript中檢查是否存在的標準方法是:

typeof myVar !== 'undefined' 

所以這裏有一點JS約定。

相關問題