2013-04-26 9 views
13

Jak sprawdzić, czy obiekt jest macierzą czy nie?Identyfikowanie obiektu tablicy

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? 

od pliku console.log ([]. ToString()); Wyjścia: puste

1-ty:

dlaczego ja się puste w 2nd ostatnim stwierdzeniem?

2-ty:

Czy istnieje sposób, aby dokładnie wiedzieć, co dany przedmiot jest: Array lub zwykły obiekt ({}) bez pomocy odpowiednich metod, takich jak x.join() wskazuje X jest tablicą nie w ten sposób.

Właściwie w wyborze jak jquery $ („p”) zwraca obiekt jquery więc jeśli mogę użyć

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

Chciałem tylko poznać rzeczywistą nazwą Object.Thats it.Thank u za pomoc u

+0

Spójrz w tej drugiej kwestii http://stackoverflow.com/questions/767486/how-do-you-check-if- a-variable-is-an-array-in-javascript – acj

Odpowiedz

8

W czystym JavaScript można użyć następujące podejście krzyżowego przeglądarki:

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

jQuery ma special method za to:

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

console.log ([]. valueOf()) // wyjście: ? jaki jest powód? –

+0

@Maizere Zasadniczo '[] .valueOf()' zwraca '[]' i nie ma tutaj żadnego sensu. – VisioN

+0

dziękuję, pomogło –

1

Proste:

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

Najlepszą praktyką jest wzywanie Object.prototype.toString() na obiekt docelowy, który wyświetla wewnętrzną nazwę [[Class]] nieruchomości.

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

Ma to atutem, że to działa na każdej i każdego obiektu, niezależnie od tego, czy pracujesz w multi klatek/okna środowiska, co powoduje problemy dotyczące korzystania x instanceof Array.


Nowsze implementacje ES5, również daje metodę Arrays.isArray(), która zwraca true lub false.

Array.isArray(x); // true 

I last but not least, jQuery ma swój własny .isArray() metodę, która zwraca również logiczna

jQuery.isArray(x); // true 
0

myślę szukasz czegoś takiego:

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

Mam nadzieję, że to pomoże.Trochę powolny: P

+1

Tak, zostało to już wysłane dwa lub trzy razy. –

3

Można użyć instanceof. Oto niektóre badania 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

Może downvoter byłby na tyle uprzejmy, aby wyjaśnić, dlaczego -1, ze względu na naukę :) – LeonardChallis

+1

Nie byłem ja (szczerze mówiąc nie uważam, że jest to wystarczająco źle, aby zasłużyć na przegraną), ale to się nie udaje w wielu Środowiska DOM, takie jak iframe i podobne. Więcej informacji można znaleźć w [tym artykule] (http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/). –

+0

świetnie - dziękuję :) – LeonardChallis

Powiązane problemy