ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptでオブジェクトの型を決定するいくつかの方法のまとめ_基礎知識

JavaScriptでオブジェクトの型を決定するいくつかの方法のまとめ_基礎知識

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

JavaScript でオブジェクトの型を検出する演算子は、typeof、instanceof、およびオブジェクトのコンストラクター属性であることがわかっています。

1) typeof 演算子 typeof は単項演算子で、戻り結果はオペランドの型を表す文字列です。 例: 「数値」、「文字列」、「ブール値」、「オブジェクト」、「関数」、「未定義」 (変数が存在するかどうかを判断するために使用できます)。 ただし、typeof の機能は限られています。Date 型と RegExp 型に対しては「オブジェクト」を返します。例:

typeof {}; // "オブジェクト"
typeof []; // "オブジェクト"
typeof new Date(); // "オブジェクト"

したがって、オブジェクトとプリミティブ型を区別する場合にのみ役立ちます。あるオブジェクト タイプを別のオブジェクト タイプと区別するには、他の方法を使用する必要があります。例:instanceof 演算子またはオブジェクトのコンストラクター プロパティ。

2) インスタンスオブ演算子。 instanceof 演算子では、左側のオペランドがオブジェクトであり、右側のオペランドがオブジェクト クラスの名前またはコンストラクターである必要があります。 object がクラスまたはコンストラクターのインスタンスである場合、instanceof 演算子は true を返します。 object が指定されたクラスまたは関数のインスタンスではない場合、または object が null の場合は false を返します。例:

[] インスタンスオブ配列; // true
[] インスタンスオブオブジェクト; // 偽
new Date インスタンスオブデート; // true
したがって、instanceof 演算子を使用して、オブジェクトが配列型であるかどうかを判断できます。

関数 isArray(arr){

配列の arr インスタンスを返す

}

3) コンストラクター属性。

JavaScript では、各オブジェクトにはコンストラクター属性があり、オブジェクトを初期化するコンストラクターを参照して、不明なオブジェクトの種類を決定するためによく使用されます。たとえば、必要な値が与えられた場合、typeof 演算子を使用して、それがプリミティブ値であるかオブジェクトであるかを判断します。オブジェクトの場合は、コンストラクター属性を使用してその型を決定できます。したがって、配列を判断する関数は次のように書くこともできます: function isArray(arr){

return typeof arr == "オブジェクト" && arr.constructor == 配列;

多くの場合、instanceof 演算子またはオブジェクトのコンストラクター プロパティを使用して、オブジェクトが配列であるかどうかを検出できます。たとえば、多くの JavaScript フレームワークは、これら 2 つのメソッドを使用して、オブジェクトが配列型であるかどうかを判断します。 ただし、クロスフレーム ページ内の配列を検出すると失敗します。その理由は、異なるフレーム (iframe) で作成された配列がプロトタイプのプロパティを相互に共有しないためです。例:


コードをコピー

コードは次のとおりです:<script></span>window.onload =function(){</div>var iframe_arr=new window.frames[0].Array;<div class="codebody" id="code48389">alert(iframe_arr instanceof Array) // false<br>alert(iframe_arr.constructor == Array); ; // false <br>}<br></script>


プロトタイプ チェーン全体で toString() メソッドを呼び出す、Ajaxian 上の正確な検出メソッドを確認しました。 ()。上記のクロスフレームワークの問題を解決できます。 Object.prototype.toString(o) が実行されると、次の手順が実行されます。 1) オブジェクト o のクラス属性を取得します。 2) 接続文字列: "[object " result(1) "]" 3) return result(2) 例:

Object.prototype.toString.call([]); // "[オブジェクト配列]" を返します
Object.prototype.toString.call(/reg/ig); // "[オブジェクト RegExp]" を返します
このようにして、オブジェクトが配列であるかどうかを判断する堅牢な関数を作成できます。



コードをコピーします

コードは次のとおりです:function isArray(arr){ return Object.prototype.toString.call(arr) === "[オブジェクト配列]";
}


このメソッドは多くの海外の JavaScript マスターによって認識されており、次期 jQuery 1.3 で配列を検出するために使用されます。 prototype.js の管理者は、オブジェクトの型名を取得するために使用される次の関数を作成しました。



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