Window对象传递typeof对象测试,但hasOwnProperty导致错误

时间:2016-03-16 20:17:12

标签: javascript

我正在尝试检查弹出窗口(opened_window = window.open())是否已在弹出窗口中加载文档/ javascript之前已关闭,因为如果未加载javascript,则无法处理{子窗口中的{1}}事件与父窗口进行通信,并让它知道弹出窗口已关闭。

当我在加载文档之前关闭弹出窗口并从父窗口执行onunload时,它会显示console.log(opened_window)是一个对象,并包含设置为opened_window的属性closedtrue opener

所以,我这样做了:

null

问题是我收到错误if (opened_window !== null && typeof opened_window === 'object') { if (opened_window.hasOwnProperty('closed') && opened_window.closed === true && opened_window.hasOwnProperty('opener') && opened_window.opener === null) { opened_window = null; // do stuff } } 。这对我来说非常困惑,因为它已经通过Uncaught TypeError: undocked_window.hasOwnProperty is not a function测试,这意味着typeof opened_window === 'object'是一个对象,那么为什么opened_window会导致错误?我的理解是.hasOwnProperty将适用于任何对象。

1 个答案:

答案 0 :(得分:4)

这很奇怪,但并非所有对象都继承自Object.prototype

例如:

Object.create(null).hasOwnProperty('foo'); // error

但你可以借用这个方法:

Object.prototype.hasOwnProperty.call(Object.create(null), 'foo'); // false