识别数组对象

时间:2013-04-26 11:17:40

标签: javascript jquery

如何知道对象是否为数组?

 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对象,所以如果我使用

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

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

6 个答案:

答案 0 :(得分:9)

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

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

jQuery有special method

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

答案 1 :(得分: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

答案 2 :(得分:2)

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

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

这有一个优点,它适用于任何和所有对象,无论你是否在多个框架/窗口环境中工作,这会导致使用x instanceof Array时出现问题。


较新的ES5实施,还为您提供方法Arrays.isArray(),该方法返回truefalse

Array.isArray( x ); // true

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

jQuery.isArray( x ); // true

答案 3 :(得分:1)

简单:

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

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

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

希望这会有所帮助。有点慢:P