使用`createElement`创建`object`标签会返回一个函数而不是一个对象

时间:2014-10-27 16:59:05

标签: javascript dom

有人可以解释为什么我在创建不同的元素时会得到不同的类型吗?

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

1 个答案:

答案 0 :(得分:3)

实施[[Call]]的对象必须报告为typeof "function"的ES5规范states

少数DOM元素(objectembed,而不是其他很多 可调用/实现[[Call]]。这可能是出于历史原因,但事实仍然是可以调用它们。

因此,Firefox在将其报告为function时在技术上是正确的。事实上,你可以认为Chrome等人。是错误的(如果严格遵守ES5规范)将它们报告为object,因为它们也可以在这些浏览器中调用。另一方面,这些浏览器正在做大多数人可能“期望”的事情。

更多详情请见Bugzilla