ホームページ >ウェブフロントエンド >jsチュートリアル >js配列の型を判断する4つの方法をまとめます。

js配列の型を判断する4つの方法をまとめます。

伊谢尔伦
伊谢尔伦オリジナル
2017-07-18 11:42:451786ブラウズ

配列の型を判定するjsメソッド

メソッドの1つinstanceof

instanceは、名前の通りinstanceなので、変数がオブジェクトのインスタンスかどうかを判定するためにinstanceofが使われます。 、これは三項算術です --- typeof

ainstanceof b?alert("true"):alert("false") との最も大きな違い // b の値が判断したいデータ型であることに注意してください。 Array などの文字列ではありません

例:


var a=[];
console.log(a instanceof Array) //返回true

メソッド 2constructor

W3C 定義の定義:コンストラクター属性は、このオブジェクトを作成した配列関数への参照を返します

返されたオブジェクトに対応するコンストラクターです。定義は、instanceof と一致しませんが、効果は同じです

例: (instanceof Array) // は Array のインスタンスですか? true or false

(a.constructor == Array) // インスタンスに対応するコンストラクターは Array ですか? true か false

例:


function employee(name,job,born){
 this.name=name;
 this.job=job;
 this.born=born;
}
var bill=new employee("Bill Gates","Engineer",1985);
console.log(bill.constructor); //输出function employee(name, jobtitle, born){this.name = name; this.jobtitle = job; this.born = born;}

次に、さまざまな型を判断する方法は次のとおりです:


console.log([].constructor == Array);
console.log({}.constructor == Object);
console.log("string".constructor == String);
console.log((123).constructor == Number);
console.log(true.constructor == Boolean);

より厳密で普遍的な方法:


function isArray(object){
 return object && typeof object==='object' &&
   Array == object.constructor;
}

! !注:

instanceof と construcor を使用する場合、判定される配列は現在のページで宣言する必要があります。たとえば、ページ(親ページ)にはフレームがあり、そのフレーム内でページ(子ページ)が参照されます。このとき、子ページ内で配列が宣言され、親ページの変数に代入されます。

理由:

1. 配列は参照データであり、転送プロセス中は参照アドレスの転送のみです。
2. 各ページの Array ネイティブ オブジェクトによって参照されるアドレスは異なります。サブページで宣言された配列の対応するコンストラクターは、親ページが判断し、使用される Array になります。はサブページの配列と等しくありません。そうしないと、問題を追跡するのが難しくなります。

方法 3特性判断方法

上記の方法にはすべて一定の欠陥がありますが、人々の知恵は全能であると信じなければなりません。その特性のいくつかに基づいて配列の種類を判断できます。


function isArray(object){
 return object && typeof object==='object' && 
   typeof object.length==='number' && 
   typeof object.splice==='function' && 
    //判断length属性是否是可枚举的 对于数组 将得到false 
   !(object.propertyIsEnumerable('length'));
}

長さとスプライスは必ずしも配列である必要はありません。属性はオブジェクトに追加できますが、最も重要な判断要素である長さ属性は列挙できないためです。

ps: ここで propertyIsEnumerable メソッドを普及させます:

object.propertyIsEnumerable(proName)

指定されたプロパティが列挙可能かどうかを判断します

注: proName がオブジェクトに存在し、For...In ループを使用して徹底的にアウトした場合、propertyIsEnumerable プロパティは true を返します。 propertyIsEnumerable プロパティは、オブジェクトに指定されたプロパティがない場合、または指定されたプロパティが列挙可能でない場合に false を返します。

propertyIsEnumerable プロパティは、プロトタイプ チェーン内のオブジェクトを考慮しません。

例:


var a = new Array("apple", "banana", "cactus");
document.write(a.propertyIsEnumerable(1));

方法4最も簡単な方法


function isArray(o) {
 return Object.prototype.toString.call(o) === ‘[object Array]‘;
}

以上がjs配列の型を判断する4つの方法をまとめます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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