因此,以下代码警告错误两次:
window.onload = function(){
alert(window.myframe.myarray instanceof Array);
alert(window.myframe.myarray.constructor === Array);
}
当名为“myframe”的页面中有一个iframe时,它包含一个名为“myarray”的数组。如果将数组移动到主页面(而不是iframe),则代码会按预期警告两次。有谁知道这是为什么?
答案 0 :(得分:18)
function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
详细说明here解释.constructor
失败的原因。
在多帧DOM环境中编写脚本时会出现问题。简而言之,在一个iframe中创建的Array对象不与另一个iframe中创建的数组共享[[Prototype]]。它们的构造函数是不同的对象,因此instanceof和构造函数检查都失败了:
答案 1 :(得分:4)
这两个窗口分别创建了自己的全局脚本环境。
一个的Array构造函数与另一个的构造函数不同。
var win2=window.myframe;
alert(win2.myarray instanceof win2.Array); returns true