首页 > 试题广场 >

以下代码能在不同环境下(不考虑兼容性问题)正确判断变量a =

[不定项选择题]
以下代码能在不同环境下(不考虑兼容性问题)正确判断变量a = [] 是数组的有:
  • a instanceof Array
  • Array.isArray(a)
  • Object.prototype.toString.call(a) === '[object Array]'
  • typeof a === 'array'
instanceof操作符的问题在于,它假定只有一个全局环境。如果网页中包含多个框架,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。
如果你从一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自不同的构造函数。
var iframe = document.createElement('iframe');
    document.body.appendChild(iframe);

    var arr = [1,2,3];
    xArray = window.frames[0].Array;  //iframe中的构造函数
    var arrx = new xArray(4,5,6);

    console.log(arrx instanceof Array);  //false
    console.log(arrx.constructor == Array);// false

    console.log(Array.prototype == xArray.prototype); //false
    console.log(arr instanceof xArray); //false

    console.log(arrx.constructor === Array);// false
    console.log(arr.constructor === Array);// true
    console.log(arrx.constructor === xArray);// true
    console.log(Array.isArray(arrx));  //true

发表于 2019-12-11 17:01:21 回复(1)

typeof主要用于判断数据是不是基本数据类型:String、Number、Object、Null、Undefined,但是无法判断出function、array、regExp
instanceof主要的目的是用来检测引用类型,判断Array和RegExp,无法准确判断Function

发表于 2020-08-13 15:07:44 回复(2)
那要是按这样说,下面这个代码也是不能正确判断的啊(毕竟我也可以说foo里面也是个环境),虽然下面的写法几乎不会出现,但上面的写法也是极少会出现的。

所以我觉得这题有点钻牛角尖。

function foo() {
function Array(){}

if (Array.isArray(a)) {//会报错undefined is not a function
console.log('a is an array')
}
}

foo()
发表于 2020-03-01 22:38:25 回复(0)
注意审题,不同环境下,instanceof如一楼所说
发表于 2020-02-17 22:26:14 回复(0)
不懂  a为什么不行
发表于 2019-12-09 11:41:41 回复(1)