2013-04-05 113 views
29

typeof (myVariable)typeof myVariable相比有什麼區別?爲什麼「typeof」不需要括號?

這兩個工作,但來自PHP,我不明白爲什麼這個函數可以使用括號或不。

+1

這不是一個函數。 – 2013-04-05 21:22:49

+1

要添加,它是一個類似於'+'或'-'的運算符https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/typeof – 2013-04-05 21:23:25

+0

因爲'typeof'是一個運算符,而不是一個函數。 – jmoerdyk 2013-04-05 21:23:30

回答

44

typeof關鍵字代表運營商Javascript編程。

typeof運營商在specification正確的定義是:

typeof[(]expression[)] ; 

這是利用typeof作爲typeof(expression)typeof expression背後的原因。

即將到來爲什麼它已被實現,因此可能會讓開發人員處理其代碼中的可見性級別。因此,可以使用typeof使用乾淨的條件語句:

if (typeof myVar === 'undefined') 
    // ... 
; 

或者說明使用()的可讀性的原因更復雜的表達式:

var isTrue = (typeof (myVar = anotherVar) !== 'undefined') && (myVar === true)); 

編輯:

在某些情況下,對typeof運算符使用括號可以使編寫的代碼更容易產生歧義。

以下面的表達式爲例,其中typeof運算符在沒有括號的情況下使用。 typeof會返回空字符串文字和數字之間的連接結果的類型,還是字符串文字的類型?

typeof "" + 42 

綜觀上述的操作者和precedence of the operators typeof and +的定義,似乎以前的表達式是等效於:

typeof("") + 42 // Returns the string `string42` 

在這種情況下,使用括號與typeof將帶來更多的清晰度你試圖表達什麼:

typeof("" + 42) // Returns the string `string` 
相關問題