【问题标题】:hasOwnProperty returns false in FFhasOwnProperty 在 FF 中返回 false
【发布时间】:2013-10-12 18:51:20
【问题描述】:

我正在尝试为我的框架创建一个方法,该方法将对元素内的文本执行某些操作,但在 FF 和 IE 中存在问题。

<div id="myDiv" style="border: 1px solid red;">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas suscipit lacus non hendrerit cursus.
</div>

<script>
    console.log(document.getElementById('myDiv').hasOwnProperty("innerHTML"));
</script>

这在 FF 和 IE 中返回 false。虽然它在 Chrome 中返回 true。知道为什么会这样吗?

【问题讨论】:

  • 你为什么要检查它是否有 innerHTML 作为它自己的属性?只需使用if ('innerHTML' in myDiv) { ... 就可以使用它,即使它不是 div 自己的属性。即使它被继承,它仍然可以工作,因为 innerHTML 是一个 getter/setter,而不是常规属性。
  • @JoeSimmons:当然有不同的方法,但我也很好奇为什么 hasOwnProperty 不起作用。
  • 对于文本,您应该使用 el.textContent 而不是可能有害的 innerHTML (developer.mozilla.org/en-US/docs/Web/API/element.innerHTML)
  • 它不能是它自己的财产。 hasOwnProperty 可能工作正常。还有什么好说的?

标签: javascript internet-explorer firefox dom hasownproperty


【解决方案1】:

从 Chrome 43 开始,根据规范,innerHTML 属性位于 Element.prototype(作为 getter/setter 对)上,而不是元素实例上。 Firefox 和 IE 正确实施规范。 Chrome 违反了规范,因为他们声称如果将其放在原型上,从 JS 到 C++ 的调用会更慢(尽管实际上,对于 DOM 属性 getter,SpiderMonkey 设法使调用比 V8 更快)。

有关此更改的更多信息,请参阅:https://developers.google.com/web/updates/2015/04/DOM-attributes-now-on-the-prototype?hl=en

【讨论】:

    猜你喜欢
    • 2020-06-25
    • 2021-12-25
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2012-12-31
    相关资源
    最近更新 更多