0

我正在尝试使用 document.hasOwnProperty 检查文档是否具有“隐藏”属性,但它在 Chrome (74) 中始终返回 false。

我试过 Object.prototype.hasOwnProperty 但这也返回错误。当我尝试对文档进行字符串化和解析时,我将 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检查对象是否具有与对象类型无关的属性?如果问题已经得到解答,我深表歉意。

4

2 回答 2

2

的目的hasOwnProperty()是检查某个属性是否定义在实例本身上,而不是通过其继承prototype

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

(感谢@Jonas Wilms 的澄清)

于 2019-05-29T11:16:27.417 回答
1

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

的目的hasOwnProperty()是检查某个属性是否定义在对象本身上,而不是通过其继承prototype

在 的情况下document,它正确地返回,false因为该hidden属性实际上是在 [ Document] 上定义的,而不是在 [文档对象] 本身上定义的。

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'));

于 2019-05-29T11:34:02.483 回答