document.hasOwnProperty("hidden") returns false 但文档隐藏了 属性

document.hasOwnProperty("hidden") returns false but document has the property hidden

我正在尝试使用 document.hasOwnProperty 检查文档是否具有 'hidden' 属性,但在 Chrome (74) 中它总是 returns 错误。

我试过 Object.prototype.hasOwnProperty 但那也是 returns 错误的。当我尝试对文档进行字符串化和解析时,我以 属性.

的形式返回了 Location 对象

console.log(document.hasOwnProperty("hidden"));
console.log(Object.prototype.hasOwnProperty.call(document, "false"));
console.log(JSON.parse(JSON.stringify(document)));
console.log(typeof document.hidden !== "undefined");
console.log(document.hidden);
console.log(Document.prototype.hasOwnProperty.call(document, "hidden"));
console.log(Document.prototype.hasOwnProperty.call(document, "location"));

不应该 hasOwnProperty 检查对象是否具有 属性 而不管对象类型?如果问题已经得到解答,我深表歉意。

hasOwnProperty()的目的是检查某个属性是否定义在实例本身,而不是通过它的[=11=继承].

document 的情况下,returns false 是正确的,因为 hidden 属性 实际上是在 Document 接口上定义的而不是实例本身。

(感谢@Jonas Wilms 的澄清)

暂时复制并更正@haim770 已删除的答案:

The purpose of hasOwnProperty() is to check whether a certain property is defined on the object itself and is not inherited through its prototype.

In the case of document, it rightfully returns false since the hidden property is actually defined on [Document] and not on [the document object] itself.

console.log('' + Object.getPrototypeOf(document));
console.log('' + Object.getPrototypeOf(Object.getPrototypeOf(document)));

console.log(document.__proto__.__proto__.hasOwnProperty('hidden'));

console.log(Object.getOwnPropertyDescriptor(Document.prototype, 'hidden'));