JSプログラムを作成する過程で、オブジェクトのタイプを判断する必要がある場合があります。たとえば、関数を記述する場合、異なるパラメータータイプを判断して、異なるコードを記述する必要があります。
まず、Typeofオペレーターについて考えて、次の例を参照してください。
<script type = "text/javascript"> var object = {}; var b = true;アラート(typeof object + "" + typeof b); </script>得られた結果は次のとおりです。
上記の結果から、オブジェクトのタイプをTypeof演算子を使用して表示できることがわかります。では、Typeofオペレーターの範囲NULLおよび未定義の範囲の結果はどうなりますか?
/*var object = {}; var b = true; alert(typeof object + "" + typeof b);*/ alert(typeof null + "" +未定義のtype)TypeOFオペレーターはnullで動作し、実際に「オブジェクト」を表示します(これは非科学的であるように思われ、「null '」を表示すると思いました)、未定義のディスプレイは「未定義」です(これは私たちが望む結果を満たします)。したがって、TypeOF演算子を使用してオブジェクトのタイプを判断する場合、このオブジェクトがnullである可能性があるため、特に注意してください。上記は、これらのオブジェクトに作用するタイプの結果のみを示しています。次の表には、ブール値、数字、文字列、配列、日付、regexp、オブジェクト、関数、null、未定義(興味のある読者が自分でテストできます)に作用するTypeofオペレーターの結果を示します。
上記の表の結果から、配列、日付、およびregexpがすべてのオブジェクトを表示することがわかります。そのため、オブジェクトの種類を直接表示してみませんか?これには、別の演算子がJS:InstanceOf Operatorから派生する必要があります。これは、オブジェクトが何らかのタイプのオブジェクトであり、計算値がtrueまたはfalsであるかどうかを判断するために使用されます。最初に見てみましょう:
var now = new date(); var pattern =/^[/s/s]*$/; var names = ['zq'、 'John']; alert((現在は日付のInstance) + "" +(pattern instanceof regexp) + "" +(names instanceof array));
明らかに、オブジェクトのタイプはこのインスタンスを介して判断できますが、これは基本タイプ(文字列タイプを含む)を除く他のタイプのみを判断することができ、基本タイプを判断することはできません。ただし、インスタンスが常に正常に判断されるとは限りません。フレームワークのケースを考慮して、そのタイプのオブジェクトが別のフレームで渡されるオブジェクトであると判断するために、まず次の例を見てください。
main.html
<!doctype html> <html lang = "en"> <head> <title> main </title> </head> <frameset cols = "45%、*"> <frame name = "frame1" src = "frame1.html"/> <frame name = "frame2" src = "frame2.html"/>> </> </> </frameset>
frame1.html
< </script> <body style = "背景:#ccc"> </body> </html>
frame2.html
<!doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> frame2 </title> <script type = "text/javascript"> document.write( "frame1.names instanceof array:" +(top.frame1.names instanceof array)); document.write( "<br/>"); document.write( "top.frame1.names instance of top.frame1.array:" +(top.frame1.names instance of top.frame1.array)); document.write( "<br/>"); document.write( "top.frame1.array === top.frame2.array?" +(top.frame1.array === top.frame2.array)); </script> </head> <body style = "背景:#747474"> </body> </html>
名前オブジェクトはFrame1 Frameworkにあり、Frame1 Frameworkの配列によって作成されます。比較のために名前オブジェクトがframe2の配列に使用される場合、名前はframe2の配列のインスタンスではないことは明らかです。 frame1とframe2は同じではなく、まったく配列であると考えられています。 2番目の現実的な結果から、名前が配置されているフレームのインスタンスであることが明確にわかります。 3番目の出力から、frame1の配列とframe2の配列が異なることがわかります。では、上記のクロスフレームの比較に遭遇した場合はどうすればよいですか?フレームワークに対応する配列を毎回比較することはできません。上記の問題を解決するために必要な方法があります。次のコードを参照してください。
var toString = {} .toString; var now = new date();アラート(toString.call(now)){} .toStringは、オブジェクトオブジェクト(このメソッドの場合はオブジェクトオブジェクトの基本メソッドの1つ)でtoStringメソッドを取得することを意味します。日付オブジェクトの最もネイティブのtoString()を呼び出す(この方法は上記のメソッド)メソッドは、[オブジェクト日付]の文字列を表示できます。配列の場合、[オブジェクト配列]という単語が生成されます。つまり、上記の操作を実行すると、[オブジェクトクラス]に似た単語が表示されます。それで、この文字列を知るためにこの文字列を判断する必要がありますか?これから、次のツールクラスを書くことができます。
tools.js
var tools =(function(undefined){var class2type = {}、toString = {} .toString; var fun = {type:function(obj){return obj === null || obj ===未定義?文字列(obj):class2type [tostring.call(obj)]}、isarray: fun.type(obj)、funce(obj)===「function」} 0; i ++){callback.call(i、arr [i]){break; name.tolowercase();ツールは、オブジェクトのタイプを判断するために、タイプ、アイソレイ、イス機能などの方法を提供します。実際のニーズに応じて、自分でタイプを決定する方法を追加できます。タイプは、OBJパラメーターを受け入れます。OBJパラメーターは、オブジェクトの実際のタイプを小文字形式で返します。たとえば、オブジェクトのタイプが配列であると判断する必要がある場合、この方法は配列を返します。
上記のツールクラスによると、上記の例を書き直します。
fram2.html
<!doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> frame2 </title> <スクリプトタイプ= "text/javascript" src = "tools.js"> </script> <script type = "text/javascript"> document.write instanceof array)); document.write( "<br/>"); document.write( "top.frame1.names instance of top.frame1.array:" +(top.frame1.names instance of top.frame1.array)); document.write( "<br/>"); document.write( "top.frame1.array === top.frame2.array?" +(top.frame1.array === top.frame2.array)); document.write( "<br/>"); document.write( "tools.isarray(top.frame1.names)?" + tools.isarray(top.frame1.names)); </script> </head> <body style = "背景:#747474"> </body> </html>
この時点で、オブジェクトタイプは上記のクラスで簡単に判断できます。
注:IEでは、アラートなどの要素を判断できません。