ホームページ >ウェブフロントエンド >jsチュートリアル >js配列の型を判断する4つの方法をまとめます。
配列の型を判定する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 サイトの他の関連記事を参照してください。