document.hasOwnProperty(“ hidden”)返回false,但是文档具有隐藏的属性

时间:2019-05-29 11:12:50

标签: javascript object dom hasownproperty

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

我已经尝试过Object.prototype.hasOwnProperty,但这也返回false。当我尝试对文档进行字符串化和解析时,我得到了Location对象作为属性。

document.hasOwnProperty("hidden") 
>>false
Object.prototype.hasOwnProperty.call(document, "false")
>>false
JSON.parse(JSON.stringify(document))
>>{location: {...}}
typeof document.hidden !== "undefined"
>>true
document.hidden
>>[true/false] (based on the PageVisibility API)
Document.prototype.hasOwnProperty.call(document, "hidden")
>>false
Document.prototype.hasOwnProperty.call(document, "location")
>>true

hasOwnProperty是否应该检查对象是否具有属性,而与对象类型无关?抱歉,问题已经回答。

2 个答案:

答案 0 :(得分:2)

hasOwnProperty()的目的是检查某个属性是否在实例上定义,并且是否通过其prototype继承。

对于document,由于false属性实际上是在hidden接口而不是实例本身上定义的,因此它会正确返回Document

(感谢@Jonas Wilms的澄清)

答案 1 :(得分: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'));