document.hasOwnProperty ("hidden") возвращает false, но у документа свойство скрыто - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь проверить, есть ли у документа свойство «hidden», используя document.hasOwnProperty, но всегда возвращает false в Chrome (74).

Я пробовал Object.prototype.hasOwnProperty, но это тоже возвращает false. Когда я попытался структурировать и проанализировать обратно документ, я получил объект 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 не должен проверять, есть ли у объекта свойство независимо от типа объекта? Я прошу прощения, если на вопрос уже был дан ответ.

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

Цель hasOwnProperty() - проверить, определено ли определенное свойство в самом экземпляре и не наследуется ли оно через prototype.

В случае document он по праву возвращает false, поскольку свойство hidden фактически определено для интерфейса Document, а не для самого экземпляра.

(спасибо @Jonas Wilms за разъяснения)

1 голос
/ 29 мая 2019

Копирование и исправление удаленного ответа @ 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'));
...