2009-07-29 14 views

Odpowiedz

16

używam tej funkcji:

function isArray(obj) { 
    return Object.prototype.toString.call(obj) === '[object Array]'; 
} 

jest sposób, jQuery.isArray jest realizowany.

Sprawdź ten artykuł:

+0

Idealny! Używam jQuery, więc po prostu go użyję. Artykuł też pomógł. – Artilheiro

+0

w nowoczesnych przeglądarkach mamy funkcję Array.isArray, więc lepiej napisać coś jak gdyby! Array.isArray {... tutaj idzie definicja ...} – shabunc

3
if(foo(1) instanceof Array) 
    // You have an Array 
else 
    // You don't 

Aktualizacja: muszę odpowiedzieć na uwagami poniżej, ponieważ ludzie są nadal twierdząc, że to nie będzie działać, nie próbując go dla siebie ...

Dla niektórych innych obiektów tej techniki nie działa (np. "" instanceof String == false), ale działa to dla Array. Testowałem go w IE6, IE8, FF, Chrome i Safari. Wypróbuj i przekonaj się przed komentowaniem poniżej.

+1

zobacz https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/instanceof_Operator – VolkerK

+5

To będzie działać * tylko *, jeśli zadeklarujesz tablicę za pomocą 'new Array()', a nie za pomocą '[] 'stenografia. Zobacz sekcję "Opis" pod powyższym adresem URL. – Boldewyn

+0

szczegółowy post na temat korzystania z tej metody: http://thinkweb2.com/projects/prototype/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/ – CMS

-1

Aby rozwiązanie bardziej ogólnie, może nie obchodzi, czy to jest rzeczywiście obiekt Array. Na przykład document.getElementsByName() zwraca obiekt, który "zachowuje się" jak tablica. "Zgodność tablicy" można założyć, jeśli obiekt ma właściwość "długość".

function is_array_compliant(obj){ 
    return obj && typeof obj.length != 'undefined'; 
} 
+0

Ciągi mają też właściwość "długość". –

+0

To prawda. Powinieneś też sprawdzić, czy: typof obj == "obiekt" – dankuck

2

Oto jeden bardzo niezawodny sposób, podejmują z javascript: dobrych części, opublikowane przez O'Reilly:

if (my_value && typeof my_value === 'object' && typeof my_value.length === 'number' && 
!(my_value.propertyIsEnumerable('length')) { // my_value is truly an array! } 

Proponuję owijając ją w swoim własnym funkcji:

function isarray(my_value) { 

    if (my_value && typeof my_value === 'object' && typeof my_value.length === 'number' && 
     !(my_value.propertyIsEnumerable('length')) 
     { return true; } 
    else { return false; } 
} 
+0

Możesz po prostu "zwrócić" wynik wyrażenia zamiast "if..else". : P –

Powiązane problemy