2009-07-29 8 views

Antwort

16

Ich benutze diese Funktion:

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

Ist die Art und Weise, dass jQuery.isArray umgesetzt wird.

prüfen Sie diesen Artikel:

+0

Perfekt! Ich benutze jQuery, also benutze ich das einfach. Der Artikel hat auch geholfen. – Artilheiro

+0

in modernen Browsern haben wir Array.isArray Funktion, also besser schreiben Sie sth wie if! Array.isArray {... hier geht die Definition ...} – shabunc

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

Update: ich zu den Kommentaren unten gemacht reagieren, weil die Menschen immer noch behaupten, dass dies nicht für sich selbst, ohne zu versuchen ... es funktioniert diese Technik

Für einige andere Objekte funktioniert nicht (zB "" instanceof String == false), aber das funktioniert für Array. Ich habe es in IE6, IE8, FF, Chrome und Safari getestet. Probieren Sie es aus und sehen Sie selbst, bevor Sie unten kommentieren.

+1

siehe https://developer.mozilla.org/de/Core_JavaScript_1.5_Reference/Operators/Special_Operators/instanceof_Operator – VolkerK

+5

Das funktioniert * nur *, wenn Sie ein Array über 'new Array()' deklarieren, nicht mit dem '[] 'Kurzschrift. Siehe den Abschnitt "Beschreibung" unter der obigen URL. – Boldewyn

+0

ein ausführlicher Post über die Verwendung dieser Methode: http://thinkweb2.com/projects/prototype/instanceof-sidered-harmful-or-how-to-write-a-robust-isarray/ – CMS

-1

Um Ihre Lösung allgemeiner zu machen, können Sie es egal, ob es tatsächlich ein Array-Objekt ist. Beispielsweise gibt document.getElementsByName() ein Objekt zurück, das sich wie ein Array verhält. "Array compliance" kann angenommen werden, wenn das Objekt eine "length" Eigenschaft hat.

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

Strings haben auch eine "length" Eigenschaft. –

+0

Das stimmt. Also, sollten Sie das auch überprüfen: typeof obj == "object" – dankuck

2

Hier ist eine sehr zuverlässige Art und Weise, nehmen Sie von Javascript: die guten Teile, von O'Reilly veröffentlicht:

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

Ich würde vorschlagen, es in Ihrer eigenen Funktion Verpackung:

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

Sie könnten einfach das Ergebnis des Ausdrucks anstelle einer 'if..else' zurückgeben. : P –

Verwandte Themen