Domanda

Dire che ho una funzione in questo modo:

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

E dire che chiamo foo (1) , come faccio a sapere se restituisce un array o no?

È stato utile?

Soluzione

Uso questa funzione:

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

È il modo in cui jQuery.isArray è implementato.

Controlla questo articolo:

Altri suggerimenti

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

Aggiornamento: devo rispondere ai commenti fatti di seguito, perché le persone sostengono ancora che questo non funzionerà senza provarlo da soli ...

Per alcuni altri oggetti questa tecnica non funziona (ad es. " " instanceof String == false), ma funziona con Array. L'ho testato in IE6, IE8, FF, Chrome e Safari. Provalo e guarda tu stesso prima di commentare qui sotto.

Ecco un modo molto affidabile, tratto da Javascript: le parti buone, pubblicato da O'Reilly:

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

Suggerirei di avvolgerlo nella tua funzione:

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; }
}

A partire da ES5 esiste IsArray .

Array.isArray([])  // true

Per rendere la tua soluzione più generale, potresti non preoccuparti se si tratta effettivamente di un oggetto Array. Ad esempio, document.getElementsByName () restituisce un oggetto che " si comporta come " un array. " Conformità dell'array " può essere assunto se l'oggetto ha una "lunghezza" Proprietà.

function is_array_compliant(obj){
    return obj && typeof obj.length != 'undefined';
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top