我是通過源的_.isFunction()
功能閱讀和看到這條線使用的typeof(/./)==「功能」:爲什麼是下劃線
if (typeof (/./) !== 'function') {
,我不明白爲什麼它的!那裏。 /./
是一個似乎總是類型爲object
的正則表達式。爲什麼_.isFunction
是重新定義如果/./
類型是function
?
我是通過源的_.isFunction()
功能閱讀和看到這條線使用的typeof(/./)==「功能」:爲什麼是下劃線
if (typeof (/./) !== 'function') {
,我不明白爲什麼它的!那裏。 /./
是一個似乎總是類型爲object
的正則表達式。爲什麼_.isFunction
是重新定義如果/./
類型是function
?
各種JavaScript引擎的一些版本已經允許調用RegExp
如使用.exec()
的另一種方式:
var pattern = /./;
pattern('abc');
pattern.exec('abc');
而且,因爲他們可贖回,typeof
considered them function
s:
類型val:Object(native或host並執行[[Call]])
結果:"function"
但據我所知,目前的版本不會顯示這種行爲,並會拋出TypeError
。但是,如果您擔心向後兼容性問題,則可能需要檢查它是否爲Underscore。
@ruakh根據我所知道的,它們應該配對 - 除非引擎使用[[[Call]] [](http://es5.github.io/#x15.3.4.5.1)的alt來使它們可以被調用。你知道一個例子嗎? –
哎呀,對不起,我誤解了Dogbert鏈接的答案,並認爲Firefox 3.6.13使用了這樣的引擎。所以我上面的評論是(可能)是錯誤的;我會刪除它。 – ruakh
在這裏回答:http://stackoverflow.com/questions/5054352/why-use-typeof-for-identifying-a-function/5054396#5054396 – Dogbert
啊,所以檢查是爲了避免意外地有正則表達式認爲功能?尼斯。很好的問題。 – ZenMaster
「爲什麼不定義_.isFunction」 - 正在重新定義。原來的toString()定義是兩個塊。 – Rup