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

vox*_*vox 4 javascript tabs window typeof instanceof

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

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

当我做

typeof m
m instanceof Object
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ry-*_*Ry- 5

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

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

您也可以使用Array.isArray(如果有).

这是一个演示.(<iframe>顺便说一下,它使用的是弹出窗口而不是弹出窗口.)

  • @vox:这是同一个实例,但“m”是父级“window.Object”类型的实例。当您在子级中使用“instanceof”时,它使用自己的“window”的“Object”类型。 (2认同)