1.実際の配列を判断する方法
JavaScriptで配列を宣言する最も簡単な方法は、次のとおりです。
var a = [];
それが配列であるかどうかを判断する最も直接的な方法は次のとおりです。
コードコピーは次のとおりです。
Arrayのインスタンス// true
a.constructor == array // true
構文のインスタンスがあります。 InstanceOFはクラウド演算子です。 「+ - */」のように、その構文は次のとおりです。
result = obj intance ofクラス
オブジェクトがクラスのインスタンスであるかどうかを判断するために使用され、操作結果がtrueまたはfalsを返します。 JavaScriptのクラスの定義はコンストラクターを介して初期化されるため、構文のインスタンスの適切な演算子は関数のインスタンスでなければなりません。つまり、クラスのインスタンスのインスタンスは真でなければならず、適切な演算子がインスタンスを使用するときに関数でない場合、TypeError例外がスローされます。すべてのオブジェクトはオブジェクトのインスタンスであるため、オブジェクトのオブジェクトインスタンスはtrueを返します。オブジェクトはコンストラクターを介して初期化されていると言いますが、IntanceOFはオブジェクトが関数によって構築されているかどうかを確認しませんが、コンストラクターのプロトタイプによって継承されます。次の例では、この問題を説明できます。
コードコピーは次のとおりです。
関数範囲(低、高){
this.low = low;
this.high = high;
}
range.prototype.constructor == range; //真実
range.prototype = {
含める:function(x){return(x> = this.low && x <= this.high); }、
除外:function(x){return(x <this.low && x> this.high); }
}
var r = new Range(0、100);
r範囲のインスタンス。 //間違い
rオブジェクトのinstance; //真実
range.prototype.constructor == object; //真実
Rは新しい範囲で構築されていますが、Rは範囲のインスタンスではありません。これが問題です。 range.prototypeの割り当てステートメントは、デフォルトのコンストラクターをオーバーライドします。プロトタイプが割り当てられる前に、range.prototype.constructorは範囲であり、割り当てが行われた後、オブジェクトになります。これは理解しやすいので
コードコピーは次のとおりです。
range.prototype = {
含める:function(x){return(x> = this.low && x <= this.high); }、
除外:function(x){return(x <this.low && x> this.high); }
}
実際には次のことに相当します。
コードコピーは次のとおりです。
range.prototype = new Object({
含める:function(x){return(x> = this.low && x <= this.high); }、
除外:function(x){return(x <this.low && x> this.high); }
});
したがって、range.prototype.constructor ==オブジェクトでは、新しい範囲を介して作成されたインスタンスはもちろんオブジェクトのインスタンスです。
公式の説明を見る方が直接的です:
オペレーターのインスタンスは、rangeコンストラクターによってRが初期化されたかどうかを実際に確認しません。 range.prototypeから継承するかどうかをチェックします。
JavaScriptには、InstanceOFと同様の関数を持つ関数タイプもありますが、番号、文字列、関数、オブジェクト、未定義、ブール波の特定の基本データ型を返します。これらの6つのタイプのみがあり、これらの6つのタイプ内ではないものはオブジェクトを返します。つまり、ArrayではなくTypeof([])はオブジェクトを返します。
関係する別の構文はコンストラクターです。コンストラクターはオブジェクトのコンストラクターを返します。
コードコピーは次のとおりです。
var a = [];
A.コストラクタ; //配列
コンストラクターは、新しい呼び出しを使用するオブジェクトの初期化関数です。オブジェクトが配列である場合、そのコンストラクターは配列である必要があり、プロトタイプのコンストラクターが変更される可能性があるため、書いたクラスは必ずしも真ではありません。
2。擬似アレイを判断する方法
JavaScriptには擬似アレイがあります。アレイと同様のトラバーサル方法を使用して移動できます。要素の長さを取得するための長さの属性があります。 [] subscriptを使用して、指定された要素を取得できます。この種のオブジェクトを擬似アレイと呼びます。 jQueryのオブジェクトは、下の図に示すように、典型的な擬似アレイです。
したがって、それが擬似アレイであるかどうかを判断するための鍵は、長さの属性があるかどうか、および基本的な配列操作関数スプライスがあるかどうかを判断することです。以下は判断方法です。
コードコピーは次のとおりです。
var is_array = function(value){
return値&&
typeof value === 'object' &&
typeof value.length === 'number' &&
typeof value.splice === 'function' &&
!(value.propertyisenumerable( 'length'));
};
ここでは、プロパティイゼラブルが使用されて、長さプロパティが列挙可能かどうかを判断します。実際、ネイティブの文字列オブジェクトには配列効果もありますが、配列オブジェクトとして扱うことはできないため、文字列オブジェクトが文字列を返すため、typeof value == "オブジェクトを判断する必要があります。