2015-10-05 59 views
4

當我寫Javascript函數未定義且仍然可調用的可能性如何?

window.external.AddSearchProvider 

在Internet Explorer 11,我得到「未定義」,但我仍然可以調用和使用功能。在Chrome中,此方法已定義並可用。

如果我寫

"AddSearchProvider" in window.external 

我在IE和Chrome瀏覽器獲得 「真」。

這是預期的行爲?我的印象是,我可以通過檢查它是否被定義來檢查是否可以使用函數,還是我誤解了某些東西?

+0

函數不能'undefined'因爲他們的功能,但變量可以'undefined'控股前'功能「對象。 – MinusFour

+0

錯誤! 'AddSearchProvider'是'window.external'中的一個變量。 'in'檢查'window.external'中是否有該名稱的變量。 AddSearchProvider的值並不重要 –

+0

@Thouartamazing呵呵?對我來說,'window.external.AddSearchProvider'的值是'undefined'確實很奇怪。 – Pointy

回答

2

window.external.AddSearchProvider不是一個「普通」javascript函數。這是瀏覽器提供的本地功能,每個瀏覽器都以不同的方式處理它。

當您在瀏覽器JavaScript控制檯中鍵入window.external.AddSearchProvider時,您會在瀏覽器的JavaScript中看到此值的表示形式。大多數瀏覽器都實現了其本機功能的表示形式,但Internet Explorer看起來並不如此,所以您會看到undefined,因爲控制檯沒有值顯示。但是這個函數是可調用的。

作爲一個例子,你可以用一個方法把它作爲一個對象像這樣

toJavascriptValue : function() { 
    return undefined; 
} 
-1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in

的操作中,如果指定的屬性在 指定的對象返回true。

Addsearchproviderwindow.external中的變量。 in檢查window.external中是否有該名稱的變量。 AddSearchProvider的值並不重要

window.external.AddSearchProvider()是一個觸發器。它會觸發所有分配的window.external.AddSearchProvider事件。

window.external.AddSearchProvider()和window.external.AddSearchProvider是完全不同的。

+1

如果屬性值爲「未定義」,那麼怎樣才能發出函數調用(成功)到'window.external.AddSearchProvider()'? – Pointy

+0

window.external.AddSearchProvider()觸發在頁面中分配的所有window.external.AddSearchProvider事件,在這種情況下,這個事件是沒有的。 –

+0

document.getElementById(「div」)。click()觸發div上的單擊事件。 –

相關問題