2014-10-27 51 views
2

有人可以解釋爲什麼我在創建不同的元素時會得到不同的類型嗎?用`createElement`創建`object`標記返回一個函數而不是對象

typeof document.createElement('div') 
"object" 
typeof document.createElement('span') 
"object" 
typeof document.createElement('embed') 
"function" 
typeof document.createElement('object') 
"function" 

這些是在Firefox:

$ firefox --version 

(process:9436): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed 
Mozilla Firefox 32.0.3 
+4

因爲它們是可調用的,和/或由於錯誤和/或向後兼容性。詳細信息:https://bugzilla.mozilla.org/show_bug.cgi?id = 268945 – Shai 2014-10-27 17:01:55

+1

Chrome和IE都會返回'object'。 – Sampson 2014-10-27 17:02:42

+0

我不會相信規範中沒有特別描述的對象上的ECMAScript操作符/方法。我寧願使用主機對象在其各自規範中提供的數據,如檢查'.nodeType'屬性。 – 2014-10-27 17:07:55

回答

3

的ES5規範states該實現[[Call]]一個對象必須被報告爲typeof"function"

DOM元素(objectembed,許多人不)調用/不實行[[Call]]一小撮。這可能是由於歷史原因,但事實仍然是,您可以可以撥打

因此,在報告它們爲function時,Firefox在技術上是正確的。事實上,你可能會認爲Chrome等人。是錯誤的(如果嚴格遵守ES5規範)將它們報告爲object,因爲它們也可以在這些瀏覽器中調用。另一方面,這些瀏覽器正在做大多數人可能會「期望」的事情。

更多詳情請見Bugzilla

相關問題