2010-05-09 31 views
54

在JavaScript typeof是一個操作符和函數。它更好地用作操作員還是功能?爲什麼?typeof運算是操作員和一個函數

+2

有點偏題:實際上,我最近很少使用'typeof'。 AFAIK,'typeof'比直接檢查慢,因爲它需要檢查許多不同的類型才能返回一個字符串。因此,我總是檢查構造函數,而不是(如果可能)一樣,'如果{...}' – 2010-05-09 13:39:04

+2

@Sune拉斯穆森((「你好」)構造==字符串) - 從有限的剖析我只是這樣做了,在Firefox 3.6中的構造函數檢查速度是'typeof'的兩倍。我有一個'無功FUNC =函數(){};'然後我做既是'的typeof FUNC = 「功能」'檢查以及一個'func.constructor = Function'檢查!。前者速度是前者的兩倍。 – JulianR 2010-05-09 15:44:05

+0

如果使用jQuery,typeof的執行時間可以忽略不計。 – 2014-11-26 00:14:22

回答

165

typeof是運營商。您可以使用易於檢查:

typeof(typeof) 

typeof函數,這個表達式將返回'function'字符串,但它會導致一個語法錯誤:

js> typeof(typeof); 
typein:8: SyntaxError: syntax error: 
typein:8: typeof(typeof); 
typein:8: .............^ 

因此,typeof不能是一個函數。也許括號表示法typeof(foo)讓你覺得typeof是一個函數,但是從語法,這些括號不函數調用 - 他們是那些用於編組,就像(2 + 3) *2。實際上,你可以添加任意數量的你想要的:

typeof(((((foo))))); // is equal to typeof foo; 
+3

請注意,對於其他運算符 - '[] instanceof(Object)'也是如此。 – 2014-11-26 00:16:02

5

我想,你選擇哪一個,你要根據明晰,作爲一種習慣,我通常以下列方式使用它作爲一個經營者,因爲它是很清楚,至少IMO:

if(typeof thing === "string") { 
    alert("this is a string"); 
} 

if(typeof thing === "function") { 
    alert("this is a function"); 
} 

這是反對這種格式:

if(typeof(thing) === "string") { 
    alert("this is a string"); 
} 

對我來說,使它稍微慢一些。如果你做typeof(thing)這是同樣的事情,所以不管漂浮你的船。 You can get a full read and what strings to expect from types here

+0

所以沒有理解更好的方法?是否存在JavaScript風格指南? – hekevintran 2010-05-09 11:58:44

+0

@hekevintran - 這裏沒有一個具體的標準,引導大家,你可以找到一個大框架,這是成熟的,並按照它的造型或許,像jQuery的或原型......但同樣這些都是風格,團隊的,所以它並不一定是「標準」。 – 2010-05-09 12:01:49

+0

血腥地獄,我不知道能夠指定sans「()」。 – 2011-10-26 20:05:22

相關問題