ホームページ  >  記事  >  ウェブフロントエンド  >  変数が Array_javascript 型であるかどうかを判断するメソッド

変数が Array_javascript 型であるかどうかを判断するメソッド

WBOY
WBOYオリジナル
2016-05-16 17:22:281148ブラウズ

多くの場合、変数の配列型を決定する必要があります。 JavaScript で変数が配列型であるかどうかを判断する方法について最近調べたので、皆さんのお役に立てれば幸いです。

JavaScript でオブジェクトを検出するメソッド
1.typeof 演算子
このメソッドは、Function、文字列、数値、未定義な​​どですが、配列オブジェクトを検出した場合は機能しません。

コードをコピーします コードは次のとおりです。

alert(typeof null); // " object"
alert(typeof function () {
return 1;
}); // "function"
alert(typeof '蒙龍駅'); // "string"
alert ( typeof 1); // "数値"
alert(typeof a); // "未定義"
alert(typeof []); " object"


2.instanceof 演算子 この演算子は、JavaScript のオブジェクト指向に多少関連しています。これを理解するには、まず JavaScript のオブジェクト指向を理解する必要があります。 。この演算子は、オブジェクトのプロトタイプ チェーンがコンストラクターのプロトタイプ オブジェクトを指しているかどうかを検出するためです。
var arr = [1,2,3,1];
alert(arr instanceof Array); // true

3. オブジェクトのコンストラクター属性 インスタンスオブ、各オブジェクトにはコンストラクター属性もあり、配列の判断に使用されるようです。

コードをコピー コードは次のとおりです:
var arr = [1,2,3 ,1] ;
alert(arr.constructor === Array); // true

2 番目と 3 番目のメソッドは完璧に見えますが、実際にはまだいくつかの抜け穴があります。フレーム内を往復する場合は、この 2 つの方法が最適です。各 iframe には独自の実行環境があるため、フレーム間でインスタンス化されたオブジェクトは相互にプロトタイプ チェーンを共有しないため、上記の検出コードは失敗します。

コピー コード コードは次のとおりです。
var iframe = document.createElement('iframe') //iframe を作成します
document.body.appendChild(iframe); / /本体に追加
xArray = window.frames[window.frames.length-1].Array;
var arr = new xArray(1,2,3); // 配列を宣言します3]
alert(arr instanceof Array); // false
alert(arr.constructor === Array) // false


配列型の検出メソッド 上記の方法は完璧に見えますが、結局のところいくつかの問題があります。次に、完璧と言える比較的良い方法をいくつか紹介します。

1.Object.prototype.toString 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. より良いリファレンス
上記の方法に基づいて、配列を記述するための現在の最良の方法があります。
code コードは次のとおりです。

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 が皆さんのお役に立てれば幸いです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。