JavaScriptで変数が配列なのか単一値なのかを確認したい。
可能性のある解決策を見つけました...
if (variable.constructor == Array)...
これは最良の方法なのでしょうか?
使うこともできます。
if (value instanceof Array) {
alert('value is Array!');
} else {
alert('Not an array');
}
これはかなりエレガントな解決策だと思いますが、人それぞれです。
Edit:
ES5の時点では、次のようなものもあります。
Array.isArray(value);
しかし、これはポリフィルを使用していない限り、古いブラウザでは壊れます(基本的に...IE8など)。
複数のソリューションがありますが、それぞれに特徴があります。このページに良い概要があります。一つの可能な解決策は
function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
クロックフォード]1を経由。
function typeOf(value) {
var s = typeof value;
if (s === 'object') {
if (value) {
if (value instanceof Array) {
s = 'array';
}
} else {
s = 'null';
}
}
return s;
}
Crockford が言及している主な障害は、window
などの異なるコンテキストで作成された配列を正しく判断できないことです。
このページには、これでは不十分な場合、より洗練されたバージョンがあります。