问题
In order to pass data between windows, I open new windows via the window.open
method and set a property of the newly opened window to an object. This allows me not only to pass data, but to share the instance of the variable, meaning if I modify the object, or any of its derived properties, on one window, it modifies it on all windows.
The problem, however, is something is going very funny with the instanceof operator.
When I do
typeof m
m instanceof Object
The first line returns "object"
while the second one returns false
.
I specifically need the instanceof operator to check between arrays and objects.
Here is a fiddle of an example (WARNING: tries to open a window on page load, so a popup blocker might block it). http://jsfiddle.net/Chakra/mxf2P/1/
回答1:
Since your window's Object
and the source window's Object
aren't the same thing, an instance of one won't be an instance of the other. You can use Object.prototype.toString
to distinguish between objects and arrays:
if(Object.prototype.toString.call(m) === '[object Array]') {
// It's an array
} else {
// It's not
}
You can also use Array.isArray
, if available.
Here's a demo. (It uses an <iframe>
instead of a popup, by the way.)
来源:https://stackoverflow.com/questions/14391506/instanceof-operator-fails-when-passing-an-object-through-windows