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

标签 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

最佳答案

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

一小部分 DOM 元素(objectembed,其他不多)可以调用/实现 [[Call ]]。这可能是由于历史原因,但事实仍然是您可以调用它们。

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

更多详情请参见Bugzilla .

关于javascript - 使用 `object` 创建 `createElement` 标签会返回一个函数而不是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26592785/

相关文章:

javascript - 为类中的每个元素添加一个<hr/>元素,得到[Object object]或纯文本而不是hr元素

更改 DOM 后 jQuery FancyBox 无法工作

javascript - 使用 CSS 类作为状态机的最佳实践?

javascript - Rails 中奇怪的 JSON Javascript 问题

javascript - 使用路由器 "No overload matches this call"包装组件时出现 React-Router + Typescript 错误

javascript - 回溯算法创建一个 "jumbled"但不是随机数组

javascript - 如何在 JavaScript 中获取对当前焦点表单字段的引用?

javascript - 防止在 AJAX 中滚动重置

javascript - 有没有办法在部分 View 中获取 ajax 调用的 Controller 路径?

javascript - SQL 多个多对多自引用关联 (Sequelize.js)