Ako v jazyku JavaScript skontrolujete, či je premenná pole?

Chcel by som skontrolovať, či je premenná v jazyku JavaScript pole alebo jedna hodnota.

Našiel som možné riešenie...

if (variable.constructor == Array)...

Je to najlepší spôsob, ako to možno urobiť?

Môžete tiež použiť:

if (value instanceof Array) {
  alert('value is Array!');
} else {
  alert('Not an array');
}

Zdá sa mi to ako celkom elegantné riešenie, ale každému podľa jeho uváženia.

Upraviť:

Od ES5 už existuje aj:

Array.isArray(value);

Ale to sa pokazí v starších prehliadačoch, pokiaľ nepoužívate polyfills (v podstate... IE8 alebo podobné).

Komentáre (13)

Existuje viacero riešení, ktoré majú svoje vlastné špecifiká. Táto stránka poskytuje dobrý prehľad. Jedno z možných riešení je:

function isArray(o) {
  return Object.prototype.toString.call(o) === '[object Array]'; 
}
Komentáre (4)

Prostredníctvom Crockford:

function typeOf(value) {
    var s = typeof value;
    if (s === 'object') {
        if (value) {
            if (value instanceof Array) {
                s = 'array';
            }
        } else {
            s = 'null';
        }
    }
    return s;
}

Hlavným nedostatkom, ktorý Crockford uvádza, je neschopnosť správne určiť polia, ktoré boli vytvorené v inom kontexte, napr. okno.

Táto stránka obsahuje oveľa prepracovanejšiu verziu, ak je táto nedostatočná.

Komentáre (0)