ホームページ >ウェブフロントエンド >jsチュートリアル >JS における Object メソッドと Aarry メソッドの区別のまとめ

JS における Object メソッドと Aarry メソッドの区別のまとめ

高洛峰
高洛峰オリジナル
2017-02-28 14:18:531338ブラウズ

1. よくある問題:

JSでオブジェクトの型を判定する場合、通常typeofが使われるのですが、このとき問題となるのは、typeof()が配列を識別する際にオブジェクトを返すため、JSで判定することです

。オブジェクトが配列であるかどうかには、いくつかの特別な処理方法が必要です。私がまとめた 6 つの処理方法を以下に紹介します。

2. 単刀直入に

開発中にオブジェクトが配列であるかどうかを判断するには、次の関数を使用することをお勧めします:

function isArray(obj){
  if(Array.isArray){
    return Array.isArray(obj);
  }else{
   return Object.prototype.toString.call(obj)==="[object Array]";
  }
}


上記の関数は、熱心な人にとって便利です問題を解決するには、試験官があなたに関する包括的な知識を必要とする可能性があるため、以下で 6 つの方法について詳しく説明します。

(1) 方法 1: toString メソッドを使用します

toString() メソッドを呼び出して変数を変換してみます。これは、その型を表す文字列です。このメソッドは実数の配列に対して実行可能です。パラメータ オブジェクトが文字列に変換され、[object Arguments] が返されると、変換は失敗します。さらに、数値の長さの属性を含むオブジェクト クラスの場合も変換は失敗します。

メソッドは次のとおりです:

nbsp;html>

 
 <title>Array的判断方法</title>
 <meta>
 <script>
	function isArrayOne(arr){
		return <span style="color:#cc0000;">Object.prototype.toString.call(arr) === "[object Array]";
	}
	var obj = {"k1":"v1"};
	var arr = [1,2];
	console.log("对象的结果:"+isArrayOne(obj));
	console.log("数组的结果:"+isArrayOne(arr));
 </script>
 
 
 
 

結果は図に示すようになります:

注: 「==」の代わりに「===」を使用することをお勧めします。 、そのほうが効率が良いからです。

JS における Object メソッドと Aarry メソッドの区別のまとめ(2) 方法 2: isArray を通じて:

JavaScript 1.8.5 (ECMAScript 5) を使用し、この関数がサポートされていれば、変数名 .isArray() でこの目的を達成できます。実際、isArray は

方法 1カプセル化が使用されます。

使用方法は非常に簡単です:

Array.isArray(obj); //objは検出されるオブジェクトです

tru​​eまたはfalseを返します、trueの場合は配列です

(3) 方法3:

instanceof 演算子の判断を使用します。注:instanceof 演算子の左側は子オブジェクト (テスト対象のオブジェクト)、右側は親コンストラクター (ここでは Array)、

つまり子です。親コンストラクターのオブジェクトのインスタンス

instance: インスタンス: すべて new で構築されます。 function() によって作成されたオブジェクトは、コンストラクターのインスタンスと呼ばれます。私は長い間混乱していたので、コードを直接見ることをお勧めします。

nbsp;html>

 
 <meta>
 <meta>
 <meta>
 <meta>
 <meta>
 <title>Document</title>
 <script>
	var obj = {"k1":"v1"};
	var arr = [1,2];
	console.log("Instanceof处理对象的结果:"+(obj instanceof Array));
	console.log("Instanceof处理数组的结果:"+(arr instanceof Array));
 </script>
 
 
 
 

実行結果は以下の通りです:

(4) isPrototypeOf() 関数を使用します

原則: オブジェクトが配列のプロトタイプであるかどうか (または、直接配列だけでなくプロトタイプチェーン内にあるかどうかを検出します)親オブジェクトだけでなく、プロトタイプ チェーン全体のすべての親オブジェクトも対象となります)

使用方法:parent.isPrototypeOf (child) は、親が子のプロトタイプであるかどうかを検出します

JS における Object メソッドと Aarry メソッドの区別のまとめ isPrototypeOf によって実装される関数に注意してください。 () 関数は instantcof 演算子と非常によく似ています。

具体的なコード:

Array.prototype.isPrototypeOf(arr) //true は配列を意味し、false は配列ではありません

(5) コンストラクターを使用します

具体的なコード:

nbsp;html>

 
 <meta>
 <meta>
 <meta>
 <meta>
 <meta>
 <title>Document</title>
 <script>
	var obj = {&#39;k&#39;:&#39;v&#39;};
	var t1 = new Array(1);
	var t2 = t1;
	console.log(obj.constructor == Array);
	console.log(t1.constructor == Array);
	console.log(t2.constructor == Array);
 </script>
 
 
	
 

結果は次のとおりです


(6) typeof (オブジェクト) + 型名を使用して判定を結合します:

コードは次のとおりです:

nbsp;html>

 
 <meta>
 <meta>
 <meta>
 <meta>
 <meta>
 <title>Document</title>
 <script>
	function isArrayFour(arr){
		if(typeof(arr)==="object"){
			if(arr.concat){
				return "This is Array";
			}else{
				return "This Not Array";
			}
		}
	}
	var arr = [1];
	var obj = {&#39;k&#39;:&#39;v&#39;};
	console.log(typeof(arr));
	console.log(typeof(obj));
	console.log(isArrayFour(arr));
	console.log(isArrayFour(obj));
 </script>
 
 
 
 
JS における Object メソッドと Aarry メソッドの区別のまとめ

結果は次のとおりです:

このメソッドには実際には限界があります。

この属性がオブジェクト内で誤って定義されたらどうなるでしょうか?

JS で Object と Aarry を区別する 6 つの方法の上記のまとめは、編集者が共有したすべての内容です。参考にしていただければ幸いです。また、PHP 中国語 Web サイトをサポートしていただければ幸いです。

JS の Object メソッドと Aarry メソッドの区別の概要に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

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