Frage

Sagen wir, ich habe eine Funktion, etwa so:

function foo(bar) {
    if (bar > 1) {
       return [1,2,3];
    } else {
       return 1;
    }
}

Und ich sage nennen foo(1), wie kann ich wissen, dass es ein Array zurückgibt oder nicht?

War es hilfreich?

Lösung

Ich benutze diese Funktion:

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

Ist die Art und Weise, die jQuery.isArray implementiert wird.

Überprüfen Sie diesen Artikel:

Andere Tipps

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

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

Für einige andere Objekte diese Technik funktioniert nicht (zum Beispiel „“ instanceof String == false), aber das funktioniert für Array. Getestet habe ich es in IE6, IE8, FF, Chrome und Safari. Versuchen Sie es und sehen Sie selbst, bevor sie unter kommentieren.

Dies ist eine sehr zuverlässige Art und Weise, von Javascript nehmen: die guten Teile, erschienen bei O'Reilly:

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

Ich schlage vor, wäre 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; }
}
scroll top