2013-04-26 34 views
13

Làm thế nào để biết một đối tượng có mảng hay không?Xác định đối tượng mảng

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? 

từ console.log ([]. ToString()); kết quả đầu ra: trống

1:

lý do tại sao tôi nhận được trống tại tuyên bố cuối cùng 2?

2:

Có cách nào để biết chính xác những gì một đối tượng là: Mảng hoặc Object đồng bằng ({}) mà không cần sự giúp đỡ của các phương pháp tương ứng của họ như x.join() chỉ ra x là một mảng , không phải theo cách này.

Trên thực tế, trong việc lựa chọn jquery như $ ("p") trả về đối tượng jquery vì vậy nếu tôi sử dụng

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

Tôi chỉ muốn biết tên thực tế của Object.Thats it.Thank u cho u giúp

+0

Hãy xem vào câu hỏi này khác http://stackoverflow.com/questions/767486/how-do-you-check-if- a-variable-is-an-array-trong-javascript – acj

Trả lời

8

Trong tinh khiết JavaScript bạn có thể sử dụng các phương pháp sau đây chéo trình duyệt:

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

jQuery có special method cho rằng:

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

console.log ([]. valueOf()) // output: ? lý do gì ở đây? –

+0

@Maizere Về cơ bản '[] .valueOf()' trả về '[]', và không có ý nghĩa gì ở đây. – VisioN

+0

cảm ơn bạn, nó đã giúp –

1

đơn giản:

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

Thực hành tốt nhất là gọi của Object.prototype.toString() trên đối tượng mục tiêu, mà hiển thị tên [[Class]] tài sản bên trong.

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

này có adventage, rằng nó hoạt động trên bất kỳ và tất cả các đối tượng, không phân biệt nếu bạn đang làm việc trong một đa khung /cửa sổ môi trường, gây ra các vấn đề về việc sử dụng x instanceof Array.


triển khai ES5 Mới hơn, cũng cung cấp cho bạn phương pháp Arrays.isArray(), mà trả về true hoặc false.

Array.isArray(x); // true 

Và cuối cùng nhưng không kém, jQuery có .isArray() phương pháp rất riêng của mình, mà cũng trả về một boolean

jQuery.isArray(x); // true 
0

Tôi nghĩ rằng bạn đang tìm kiếm một cái gì đó như thế này:

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

Hy vọng điều này sẽ hữu ích.Một chút chậm: P

+1

Có, điều này đã được đăng hai hoặc ba lần. –

3

Bạn có thể sử dụng instanceof. Dưới đây là một số thử nghiệm 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

+1

Có lẽ người downvoter sẽ tử tế, đủ để giải thích lý do tại sao -1, vì lợi ích của việc học :) – LeonardChallis

+1

Không phải tôi (thẳng thắn tôi không nghĩ rằng điều này là sai đủ để xứng đáng với một downvote), nhưng điều này thất bại trong đa Các môi trường DOM như iframe và tương tự. Xem [bài viết này] (http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/) để biết thêm. –

+0

tuyệt vời - cảm ơn :) – LeonardChallis

Các vấn đề liên quan