多くの場合、変数の配列型を決定する必要があります。 JavaScript で変数が配列型であるかどうかを判断する方法について最近調べたので、皆さんのお役に立てれば幸いです。
JavaScript でオブジェクトを検出するメソッド
1.typeof 演算子
このメソッドは、Function、文字列、数値、未定義などですが、配列オブジェクトを検出した場合は機能しません。
この演算子は、JavaScript のオブジェクト指向に多少関連しています。これを理解するには、まず JavaScript のオブジェクト指向を理解する必要があります。 。この演算子は、オブジェクトのプロトタイプ チェーンがコンストラクターのプロトタイプ オブジェクトを指しているかどうかを検出するためです。
3. オブジェクトのコンストラクター属性
2 番目と 3 番目のメソッドは完璧に見えますが、実際にはまだいくつかの抜け穴があります。フレーム内を往復する場合は、この 2 つの方法が最適です。各 iframe には独自の実行環境があるため、フレーム間でインスタンス化されたオブジェクトは相互にプロトタイプ チェーンを共有しないため、上記の検出コードは失敗します。
Object.prototype.toString の動作: まず、オブジェクトの内部プロパティ [[Class]] を取得し、次にこのプロパティに基づいて、次のような値を返します。 "[object Array]" の文字列が結果として使用されます (ECMA 標準を読んだことがある人は、[[]] が言語の内部で使用される属性を表すために使用され、言語から直接アクセスできないことを知っているはずです)外部、「内部属性」と呼ばれます)。このメソッドを呼び出しと組み合わせて使用すると、任意のオブジェクトの内部属性 [[Class]] を取得し、型検出を文字列比較に変換して目的を達成できます。
function isArrayFn (o) {
return Object.toString.call(o) === '[オブジェクト配列]'
}
var arr = [1,2,3,1]; );// true
call は、toString の this 参照を検出対象のオブジェクトに変更し、このオブジェクトの文字列表現を返し、文字列が '[object Array]' であるかどうかを比較して、それが Array のインスタンスであるかどうかを判断します。 o.toString() を直接実行しないのはなぜでしょうか? Array は Object から継承しますが、toString メソッドも持ちますが、このメソッドは書き換えられて要件を満たさない可能性があり、Object.prototype はトラの尻です。あえて触れようとする人はほとんどいないため、その「純度」はある程度保証できます:)
JavaScript 標準ドキュメントの定義: [[Class]] の値は次の文字列の 1 つだけです。 : 引数、配列、ブール値、日付、エラー、関数、JSON、数学、数値、オブジェクト、正規表現、文字列
このメソッドは組み込みオブジェクトを識別する場合に非常に便利ですが、カスタムにはこのメソッドを使用しないでください。オブジェクト。
2.Array.isArray() ECMAScript5 では、値が配列であるかどうかを正確に検出する目的で、Array.isArray() を JavaScript に正式に導入しました。 IE9、Firefox 4、Safari 5、Opera 10.5、および Chrome はすべてこのメソッドを実装しています。ただし、IE8 より前のバージョンはサポートされていません。
3. より良いリファレンス 上記の方法に基づいて、配列を記述するための現在の最良の方法があります。
var arr = [1,2,3,1];
var arr2 = [{ abac : 1, abc : 2 }];
function isArrayFn(value){
if (typeof Array.isArray === "関数") {
return Array.isArray(value);
🎜> return Object.prototype.toString.call(value) === "[オブジェクト配列]";
}
}
alert(isArrayFn(arr));// true
alert( isArrayFn( arr2));// true
JavaScript で変数が配列型であるかどうかを判断する方法 上記は、変数が配列型であるかどうかを判断するために私が共有した方法です。 JavaScript が皆さんのお役に立てれば幸いです。