<strong>1) typeof 演算子 <br></strong>typeof は単項演算子であり、戻り結果はオペランドの型を説明する文字列です。例: 「数値」、「文字列」、「ブール値」、「オブジェクト」、「関数」、「未定義」 (変数が存在するかどうかを判断するために使用できます)。 <br>ただし、typeof の機能は限られています。Date 型と RegExp 型に対しては「オブジェクト」を返します。例: <br><div class="codetitle"> <span><a style="CURSOR: pointer" data="62304" class="copybut" id="copybut62304" onclick="doCopy('code62304')"><u> コードをコピーします </u></a></span> コードは次のとおりです。 </div> <div class="codebody" id="code62304"> <br>typeof {}; "object" <br>typeof []; // "object" <br>typeof new Date(); // "object" <br> </div> <br>したがって、オブジェクトとプリミティブ型を区別する場合にのみ役立ちます。 。あるオブジェクト タイプを別のオブジェクト タイプと区別するには、他の方法を使用する必要があります。例:instanceof 演算子またはオブジェクトのコンストラクター属性。 <br><br><strong>2) インスタンスオブ演算子。 </strong> <br>instanceof 演算子では、左側のオペランドがオブジェクトであり、右側のオペランドがオブジェクト クラスの名前またはコンストラクターである必要があります。 object がクラスまたはコンストラクターのインスタンスである場合、instanceof 演算子は true を返します。 object が指定されたクラスまたは関数のインスタンスではない場合、または object が null の場合は false を返します。例: <br><br>[]instanceofArray; //true<br>[]instanceofRegExp; //false<br>new DateinstanceofDate; <br><br>したがって、instanceof 演算子を使用して、オブジェクトが配列型であるかどうかを判断できます。 } <br> <br><br>3) コンストラクター属性。 <br> <br>JavaScript では、各オブジェクトには、オブジェクトを初期化するコンストラクターを参照するコンストラクター属性があり、不明なオブジェクトの種類を決定するためによく使用されます。たとえば、クエリ値が指定された場合、typeof 演算子を使用して、それがプリミティブ値であるかオブジェクトであるかを判断します。オブジェクトの場合は、コンストラクター属性を使用してその型を決定できます。したがって、配列を判断する関数は次のように書くこともできます。 <br><br>function isArray(arr) <br>{ <strong>return typeof arr == "object" && arr.constructor == Array; >} </strong><br>多くの場合、instanceof 演算子またはオブジェクトのコンストラクター プロパティを使用して、オブジェクトが配列であるかどうかを検出できます。たとえば、多くの JavaScript フレームワークは、これら 2 つのメソッドを使用して、オブジェクトが配列型であるかどうかを判断します。 <br>ただし、クロスフレーム ページ内の配列を検出すると失敗します。その理由は、異なるフレーム (iframe) で作成された配列がプロトタイプのプロパティを相互に共有しないためです。例: <br><br><br><br><br> コードをコピーします <br><br><br> コードは次のとおりです。 <div class="codetitle"> <span> <a style="CURSOR: pointer" data="54018" class="copybut" id="copybut54018" onclick="doCopy('code54018')"><script> >window.onload =function(){ <u>var iframe_arr=new window.frames[0].Array; </u>alert(iframe_arr instanceof Array) // false </a>alert(iframe_arr.constructor == Array); ; // false </span>} </div> <div class="codebody" id="code54018"><body> <br></body> 🎜>Ajaxian では、プロトタイプ チェーン全体で toString() メソッドを呼び出す、正確な検出メソッドを確認しました: Object.prototype.toString()。上記のクロスフレームワークの問題を解決できます。 <br><br>Object.prototype.toString(o) が実行されると、次の手順が実行されます。 <br>1) オブジェクト o のクラス属性を取得します。 <br>2) 接続文字列: "[object " result(1) "]" <br>3) return result(2) <br><br>例: <br><br>Object.prototype.toString。 call([]); // "[オブジェクト配列]" を返します <br>Object.prototype.toString.call(/reg/ig); // "[オブジェクト RegExp]" を返します </div> <br>オブジェクトが配列であるかどうかを判断する堅牢な関数を作成できます。 <br><br><br><br><br>コードをコピーします <br><br><br> コードは次のとおりです。 <br><br> <br>function isArray(arr) <br>{ <br>return Object.prototype.toString.call(arr) === "[オブジェクト配列]"; <div class="codetitle"><span> <a style="CURSOR: pointer" data="31992" class="copybut" id="copybut31992" onclick="doCopy('code31992')">これ このメソッドは多くの海外の JavaScript マスターによって認識されており、このメソッドは次期 jQuery 1.3 で配列を検出するために使用されます。 <u></u>prototype.js の管理者は、オブジェクトの型名を取得するために使用される次の関数を作成しました </a></span></div> <div class="codebody" id="code31992"> <br>コードをコピー<br><br><br> コードは次のとおりです: <br><div class="codebody" id="code71513"> <br>/**<br>* オブジェクトの内部 [[Class]] プロパティを返します <br>* <br>* Ecma-262、15.2.4.2 <br>* Object.prototype.toString( ) <br>* <br>* の場合toString メソッドが呼び出されると、次の手順が実行されます。 <br>* 1. このオブジェクトの [[Class]] プロパティを取得します。 <br>* 2. 3 つの文字列「[object "、Result (1)、および "]" を連結して文字列値を計算します。 <br>* 3. 結果 (2) を返します。 <br>* <br>* __getClass(5); // => "数値" <br>* __getClass({}); // => "オブジェクト" <br>* __getClass(/foo/); // => "RegExp" <br>* __getClass(''); // => "文字列" <br>* __getClass(true); // => "ブール値" <br>* __getClass([]); // => "配列" <br>* __getClass(未定義); // => "ウィンドウ" <br>* __getClass(Element); // => 「コンストラクター」 <br>* <br>*/ <br>function __getClass(object) <br>{ <br>return Object.prototype.toString.call(object).match(/^[objects(.* )]$/)[1]; <br><br> </div>これを展開してさまざまなオブジェクト タイプを検出します: <br><br><div class="codetitle"> <span><a style="CURSOR: pointer" data="52950" class="copybut" id="copybut52950" onclick="doCopy('code52950')">コードをコピーします。 ><u></u> コードは次のとおりです:</a></span> </div>var is = <div class="codebody" id="code52950">{ <br>types: ["Array", "Boolean", "Date", "Number" , "Object", "RegExp", "String", "Window", "HTMLDocument"] <br>} <br><br>for(var i = 0, c; c = is.types[i ]; ) <br>{ <br>is[c] = (function(type) <br>{ <br>return function(obj) <br>{ <br>return Object.prototype.toString.call(obj) == " [object " type "]"; <br>} <br>} <br>)(c); <br>} <br>alert(is.Array([])); // true <br>alert( is.Date(new Date)); // true <br>alert(is.RegExp(/reg/ig)) // true <br><br> </div> </div>