我正在尝试使用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
是否应该检查对象是否具有属性,而与对象类型无关?抱歉,问题已经回答。
答案 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'));