当通过窗口传递对象时,instanceof运算符失败

时间:2013-01-18 02:24:46

标签: javascript tabs window instanceof typeof

为了在窗口之间传递数据,我通过window.open方法打开新窗口,并将新打开的窗口的属性设置为对象。这使我不仅可以传递数据,还可以共享变量的实例,这意味着如果我在一个窗口上修改对象或其任何派生属性,它会在所有窗口上修改它。

然而,问题是使用instanceof运算符非常有趣。

当我这样做时

typeof m
m instanceof Object

第一行返回"object",第二行返回false

我特别需要instanceof运算符来检查数组和对象。

这是一个示例的小提示(警告:尝试在页面加载时打开一个窗口,因此弹出窗口阻止程序可能会阻止它)。 http://jsfiddle.net/Chakra/mxf2P/1/

1 个答案:

答案 0 :(得分:5)

由于您的窗口Object和源窗口的Object不是同一个东西,因此一个实例不会是另一个的实例。您可以使用Object.prototype.toString来区分对象和数组:

if(Object.prototype.toString.call(m) === '[object Array]') {
    // It's an array
} else {
    // It's not
}

如果可以,您还可以使用Array.isArray

Here's a demo.(顺便说一下,它使用<iframe>代替弹出窗口。)