26

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

 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 是一个数组,而不是这种方式。

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

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

我只是想知道对象的实际名称。就是这样。谢谢你的帮助

4

6 回答 6

13

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

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

jQuery 对此有特殊的方法

if ($.isArray(x)) {
    // is plain array
}
于 2013-04-26T11:18:54.797 回答
4

您可以使用instanceof. 这是一些 FireBug 测试:

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

于 2013-04-26T11:22:32.317 回答
2

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

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

这有一个好处,它适用于任何对象,无论您是否在多框架/窗口环境中工作,这都会导致使用x instanceof Array.


较新的 ES5 实现,也给你方法Arrays.isArray(),它返回trueor false

Array.isArray( x ); // true

最后但同样重要的是,jQuery 有它自己的.isArray()方法,它也返回一个布尔值

jQuery.isArray( x ); // true
于 2013-04-26T11:19:07.723 回答
1

简单的:

if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
    alert( 'Array!' );
}
于 2013-04-26T11:18:55.883 回答
1

http://api.jquery.com/jQuery.isArray/

if($.isArray(x)){
  alert("isArray");
}
于 2013-04-26T11:21:06.020 回答
0

我想你正在寻找这样的东西:

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

希望这可以帮助。有点慢:P

于 2013-04-26T11:20:04.107 回答