关于javascript:标识数组对象

Identifying Array Object

本问题已经有最佳答案,请猛点这里访问。

如何知道一个对象是否是数组?

1
2
3
4
5
6
7
 var x=[];

console.log(typeof x);//output:"object"
alert(x);//output:[object Object]
console.log(x.valueOf())//output:<blank>? what is the reason here?
console.log([].toString()); also outputs <blank>    
Object.prototype.toString.call(x) output:[object Array] how?

自console.log([].toString())以来;输出:空白

第一:

为什么我在最后一个第二个陈述时会变得空白?

第二:

有没有一种方法可以确切地知道对象是什么:数组或纯对象(),而无需它们各自的方法(如x)的帮助。join()表示x是一个数组,而不是以这种方式。

实际上,在jquery中,像$("p")这样的选择会返回jquery对象,因此如果我使用

1
console.log(typeof $("p"));//output:"object

我只想知道物体的实际名称,就这样,谢谢你的帮助


在纯JavaScript中,您可以使用以下跨浏览器方法:

1
2
3
if (Object.prototype.toString.call(x) ==="[object Array]") {
    // is plain array
}

jquery有特殊的方法:

1
2
3
if ($.isArray(x)) {
    // is plain array
}


您可以使用instanceof。下面是一些Firebug测试:

1
2
3
4
5
6
7
test1 = new Object();
test2 = new Array();
test3 = 123;

console.log(test1 instanceof Array); //false
console.log(test2 instanceof Array); //true
console.log(test3 instanceof Array); //false


最佳实践是对目标对象调用Object.prototype.toString(),它显示内部[[Class]]属性名。

1
Object.prototype.toString.call( x ); // [object Array]

这是一种出现,它适用于任何和每个对象,不管您是否在多帧/窗口环境中工作,这会导致使用x instanceof Array时出现问题。

更新的ES5实现还提供了方法Arrays.isArray(),它返回truefalse

1
Array.isArray( x ); // true

最后,jquery有自己的.isArray()方法,它还返回一个布尔值。

1
jQuery.isArray( x ); // true

http://api.jquery.com/jquery.isarray/

1
2
3
if($.isArray(x)){
  alert("isArray");
}

简单的:

1
2
3
if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
    alert( 'Array!' );
}

我想你在找这样的东西:

1
2
3
if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
    alert( 'Array!' );
}

希望这有帮助。稍微慢一点:P