配列Arayを判断する方法

1166 ワード

配列はJavaScriptの中で重要なデータタイプで、よく使われます.どのようにして配列の対象かどうかを判断しますか?直接typeofはだめです.他の方法はありますか?実はたくさんあります.
instance ofまたはconstructor
var arr=[1,2,3];
typeof arr; // object
arr instanceof Array; //true
arr instanceof Object; //true
arr.constructor == Array; // true
この2つの方法はいずれもJavaScriptにおけるオブジェクト指向の特徴を用いて,オブジェクトのプロトタイプが構造関数のプロトタイプオブジェクトに向けられているかを検出した.この2つの方法はいくつかの場合には手抜かりがあります.複数のframeの中を往復するとき、この2つの方法はアレクサンドロスになります.各iframeは自分の実行環境を持っていますので、frameにまたがって実装されるオブジェクトは互いにプロトタイプチェーンを共有しないため、上記の検出コードが無効になります.
Object.prototype.toString.call()
var arr=[1,2,3];
Object.prototype.toString.call(arr) === "[object Array]";
// true
var date = new Date();
Object.prototype.toString.call(date);
//"[object Date]"
Object.prototype.toString.call(null);
//"[object Null]"
Object.prototype.toString.call(undefined);
//"[object Undefined]"
この方法はやはり使いやすいです.Date、Aray、null、undefinedの種類を識別できますが、大きさに注意して書きます.
isAray()
var arr = [1,2,3];
Array.isArray(arr);//true
ECMAScript 5はAray.isAray()を正式にJavaScriptに導入しました.目的は正確に配列かどうかを検出することです.ほとんどのブラウザはこの方法を実現していますが、IE 8の前のバージョンはサポートされていません.