JavaScriptで配列かどうかを判断する方法
JavaScriptでは、変数が配列かどうかを判断するためのいくつかの方法があります。それぞれの方法には特徴があり、状況に応じて使い分けることができます。ここでは、主な3つの方法について詳しく説明します。
1. `Array.isArray()` メソッドを使用する
Array.isArray()
メソッドは、引数が配列であれば true
を、そうでなければ false
を返します。このメソッドは ES5 で導入され、現在では最も信頼性が高く推奨される方法です。
const arr = [1, 2, 3];
const obj = {};
console.log(Array.isArray(arr)); // true
console.log(Array.isArray(obj)); // false
このメソッドは、標準的な配列だけでなく、配列のように振る舞うオブジェクト(配列風オブジェクト)も正確に判断します。
2. `Object.prototype.toString.call()` メソッドを使用する
Object.prototype.toString.call()
メソッドは、オブジェクトの内部クラス名を示す文字列を返します。配列の場合、このメソッドは "[object Array]"
を返します。以下の例では、この方法を使って配列かどうかを判断します。
const arr = [1, 2, 3];
const obj = {};
console.log(Object.prototype.toString.call(arr)); // "[object Array]"
console.log(Object.prototype.toString.call(obj)); // "[object Object]"
この方法は、古いブラウザや互換性の問題を気にすることなく、信頼性の高い結果を得られます。しかし、配列に限定して判断するためには、比較対象のクラス名を正確に把握しておく必要があります。
3. `instanceof` 演算子を使用する
instanceof
演算子は、オブジェクトが特定のコンストラクタ関数のプロトタイプチェーン上に存在するかどうかをチェックします。配列の場合、Array
コンストラクタ関数のプロトタイプチェーン上に存在するかを判断します。
const arr = [1, 2, 3];
const obj = {};
console.log(arr instanceof Array); // true
console.log(obj instanceof Array); // false
instanceof
演算子は、異なるiframeやウィンドウで作成されたオブジェクトには信頼性が低い場合があります。そのため、異なる文脈で配列を扱う場合は、他の方法と組み合わせて使用することをお勧めします。
配列が空かどうかをチェックする
配列が空かどうかをチェックするには、length
プロパティを使用します。length
プロパティは、配列の要素数を設定または取得するために使用されます。要素数が0の場合、配列は空であると判断できます。
const arr = [];
if (arr.length === 0) {
console.log('配列は空です');
} else {
console.log('配列は空ではありません');
}
この方法はシンプルで、配列の要素数を確認するだけで空かどうかを判断できます。配列が空でない場合、length
プロパティは1以上の値を持ちます。
比較表
方法 | 説明 | 信頼性 |
---|---|---|
Array.isArray() |
引数が配列かどうかをチェックする | 高 |
Object.prototype.toString.call() |
オブジェクトの内部クラス名を表す文字列を返す | 中 |
instanceof |
オブジェクトがコンストラクタのプロトタイプチェーン上に存在するかどうかをチェックする | iframeやウィンドウをまたぐ場合は低 |
参考資料
- Array.isArray() - JavaScript | MDN
- Object.prototype.toString() - JavaScript | MDN
- instanceof - JavaScript | MDN
Q&A
Q1: どの方法を使うのが一番良いですか?
A1: Array.isArray()
メソッドが最も信頼性が高く、推奨される方法です。このメソッドは標準化されており、すべてのモダンなブラウザでサポートされています。
Q2: `instanceof` 演算子はなぜ信頼性が低いのですか?
A2: 異なるiframeやウィンドウで作成されたオブジェクトに対しては、instanceof
演算子は期待通りに動作しない可能性があります。これは、各iframeやウィンドウが独自のJavaScript環境を持っているためです。
Q3: 配列が空かどうかをチェックするにはどうすればいいですか?
A3: 配列の length
プロパティが 0 かどうかをチェックします。0 の場合は、配列は空です。これにより、配列が要素を持っているかどうかを簡単に確認できます。
まとめ
JavaScriptで配列かどうかを判断する方法には、Array.isArray()
メソッド、Object.prototype.toString.call()
メソッド、instanceof
演算子の3つがあります。それぞれの方法には特性があり、状況に応じて使い分けることが重要です。配列が空かどうかをチェックするためには、length
プロパティを利用するのが簡単で効率的です。
その他の参考記事:JavaScript 配列