在JavaScript typeof
是一個操作符和函數。它更好地用作操作員還是功能?爲什麼?typeof運算是操作員和一個函數
回答
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;
請注意,對於其他運算符 - '[] instanceof(Object)'也是如此。 – 2014-11-26 00:16:02
我想,你選擇哪一個,你要根據明晰,作爲一種習慣,我通常以下列方式使用它作爲一個經營者,因爲它是很清楚,至少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。
所以沒有理解更好的方法?是否存在JavaScript風格指南? – hekevintran 2010-05-09 11:58:44
@hekevintran - 這裏沒有一個具體的標準,引導大家,你可以找到一個大框架,這是成熟的,並按照它的造型或許,像jQuery的或原型......但同樣這些都是風格,團隊的,所以它並不一定是「標準」。 – 2010-05-09 12:01:49
血腥地獄,我不知道能夠指定sans「()」。 – 2011-10-26 20:05:22
- 1. typeof運算和一個基類
- 2. NHibernate.ISession.CreateCriteria(typeof運算(BusinessObject的))是{}
- 3. 作爲成員函數和非成員函數的運算符函數
- 4. 爲什麼typeof被稱爲運算符而不是函數?
- 5. C++ typeof運算符
- 6. 操作員及和*在函數原型
- 7. 運算符==是成員函數還是朋友函數?
- 8. typeof運算(ICollection的<>).GetTypeInfo()。IsAssignableFrom(typeof運算(IList的<>))
- 9. typeof運算指令不工作
- 10. 類型轉換和typeof運算
- 11. typeof運算和運營商的instanceof返回同一變種
- 12. 是~~一個短路操作員?
- 13. 調用一個函數 - 獲得「需要作爲一元運算的左值」和「操作數」
- 14. 泛型TypeOf運算符?
- 15. C中的typeof運算符
- 16. [的ExpectedException(typeof運算(AnExceptionBaseException))]
- 17. typeof運算等效在scriptsharp
- 18. 操作員新操作員和新操作員不能重載?
- 19. 評估運算符號和執行操作員
- 20. 空隙(),逗號運算符(操作員)和不可能超載
- 21. 重載一個布爾運算符的成員函數
- 22. 運算符重載:成員函數與非成員函數?
- 23. 運算符(操作數?)作爲參數
- 24. 爲什麼typeof運算執行函數返回undefined
- 25. typeof運算在IE <= 8,用於本地函數
- 26. 的Sun Studio編譯器:隱函數聲明:typeof運算
- 27. JavaScript的怪誕 - typeof運算[] ===的typeof {}計算結果爲 '真'
- 28. 如何計算沒有操作員和任何回合函數的模數?
- 29. PHP計算器操作員
- 30. 這裏的一元運算符和操作數在哪裏?
有點偏題:實際上,我最近很少使用'typeof'。 AFAIK,'typeof'比直接檢查慢,因爲它需要檢查許多不同的類型才能返回一個字符串。因此,我總是檢查構造函數,而不是(如果可能)一樣,'如果{...}' – 2010-05-09 13:39:04
@Sune拉斯穆森((「你好」)構造==字符串) - 從有限的剖析我只是這樣做了,在Firefox 3.6中的構造函數檢查速度是'typeof'的兩倍。我有一個'無功FUNC =函數(){};'然後我做既是'的typeof FUNC = 「功能」'檢查以及一個'func.constructor = Function'檢查!。前者速度是前者的兩倍。 – JulianR 2010-05-09 15:44:05
如果使用jQuery,typeof的執行時間可以忽略不計。 – 2014-11-26 00:14:22