有人可以解释一下为什么我在创建不同的元素时会得到不同的类型吗?
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
最佳答案
ES5 规范 states实现 [[Call]]
的对象必须报告为 typeof
"function"
。
一小部分 DOM 元素(object
、embed
,其他不多)可以调用/实现 [[Call ]]
。这可能是由于历史原因,但事实仍然是您可以调用它们。
因此 Firefox 将它们报告为函数
在技术上是正确的。事实上,你可以认为 Chrome 等人。将它们报告为对象是错误的(如果严格遵守 ES5 规范),因为它们在这些浏览器中也是可调用的。另一方面,这些浏览器正在做大多数人可能“期望”的事情。
更多详情请参见Bugzilla .
关于javascript - 使用 `object` 创建 `createElement` 标签会返回一个函数而不是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26592785/