Norėčiau patikrinti, ar "JavaScript" kintamasis yra masyvas, ar viena reikšmė.
Radau galimą sprendimą...
if (variable.constructor == Array)...
Ar tai geriausias būdas tai padaryti?
Taip pat galite naudoti:
if (value instanceof Array) {
alert('value is Array!');
} else {
alert('Not an array');
}
Man atrodo, kad tai gana elegantiškas sprendimas, bet kiekvienam savo.
Redaguoti:
Nuo ES5 dabar taip pat yra:
Array.isArray(value);
Tačiau senesnėse naršyklėse tai neveikia, nebent naudojate polipinius papildymus (iš esmės... IE8 ar panašiai).
Yra daugybė sprendimų, turinčių savo ypatumų. Šiame puslapyje pateikiama gera apžvalga. Vienas iš galimų sprendimų:
function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
Per Crockford:
function typeOf(value) {
var s = typeof value;
if (s === 'object') {
if (value) {
if (value instanceof Array) {
s = 'array';
}
} else {
s = 'null';
}
}
return s;
}
Pagrindinis Crockfordo minimas trūkumas yra nesugebėjimas teisingai nustatyti masyvų, kurie buvo sukurti kitame kontekste, pvz., window
.
Tame puslapyje yra daug sudėtingesnė versija, jei to nepakanka.