この記事では、JavaScript の typeof と instanceof の違いについて説明します (コード例)。必要な方は参考にしていただければ幸いです。
JavaScript の typeof と instanceof は、変数が空かどうか、またはその型を判断するためによく使用されます。しかし、それらの間にはまだ違いがあります。
typeof
typeof は単項演算であり、オペランドの前に置かれ、オペランドは任意の型にすることができます。
戻り値は、オペランドの型を説明する文字列です。 (typeof 演算子は、式のデータ型を表すために使用される文字列を返します。)
typeof は、実際には、1 つのパラメーターについて、パラメーターの型を決定するインスタンスです。次の結果のみを返します:「数値」、「文字列」、「ブール値」、「オブジェクト」、「関数」、および「未定義」。
オペランドは数値です typeof(x) = "number"
文字列 typeof(x) = "string"
ブール値 typeof(x) = "boolean"
オブジェクト、配列、null typeof(x) = "object"
Function typeof(x) = "function"
1 2 3 4 5 6 7 |
|
typeof を使用して変数かどうかを取得できます。 a が存在しない (宣言されていない) 場合、エラーが発生するため、if(typeof a!="unknown"){alert("ok")} などの特殊なオブジェクトが存在する場合は、if(a) を使用しないでください。配列と Null typeof を使用すると、常にオブジェクトが返されます。これは typeof の制限です。
配列は、同じ名前の複数の入力など、js でよく使用されます。配列が動的に生成される場合は、送信時にそれらが配列であるかどうかを判断する必要があります。
1 2 3 4 |
|
typeof のオペランド。は定義ではないため、戻り値は「未定義」になります。
JavaScript では、typeof 演算子を使用して変数の型を決定します。typeof 演算子を使用する場合、参照型を使用するときに問題が発生します。参照に関係なく、値を格納します。オブジェクトの種類に関係なく、「object」を返します。これには、オブジェクトが別のオブジェクトのインスタンスであるかどうかを検出するために、instanceof が必要です。
instanceofinstanceof 演算子は、オブジェクトのプロトタイプ チェーンにコンストラクターのプロトタイプ属性があるかどうかをテストするために使用されます。
構文: objectinstanceofconstructor
パラメータ: object (検出対象のオブジェクト)constructor (コンストラクター)説明:instanceof 演算子は、constructor.prototype がパラメータ オブジェクトに存在するかどうかを検出するために使用されます。プロトタイプチェーン。
instance: インスタンス、example
ainstanceof b?alert("true"):alert("false"); //a は b のインスタンスです? True: False
instanceof は、変数がオブジェクトのインスタンスであるかどうかを判断するために使用されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Case:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
instanceof について言えば、もう 1 つの質問を挿入する必要があります。これは関数 Arguments であり、引数は Array であると誰もが考えるかもしれませんが、instanceof を使用してテストすると、見た目は非常に似ていますが、arguments は Array オブジェクトではないことがわかります。
Also:
Test var a=new Array();if (オブジェクトのインスタンス)alert('Y');elsealert('N');
'Y'を取得しました
しかし、 if (オブジェクトのウィンドウインスタンス)alert('Y');elsealert('N');
got 'N'
つまり、ここで、instanceof によってテストされるオブジェクトは、dom モデル オブジェクトではなく、js 構文のオブジェクトを指します。
typeof
alert(typeof(window)) を使用すると object が取得されるため、いくつかの違いがあります。
式 obj instanceof Foo が true を返す場合、これは、Foo.prototype 属性の値が変更される可能性があり、変更された値が obj のプロトタイプ チェーンに存在しない可能性があるため、式が常に true を返すことを意味します。この場合、元の式の値が返されます。偽になる。別のケースでは、元の式の値も変更されます。つまり、オブジェクト obj のプロトタイプ チェーンが変更されます。ただし、現在の ES 仕様では、オブジェクトのプロトタイプを読み取ることはできますが、変更することはできません。非標準の __proto__ マジック プロパティの助けを借りて実現できます。たとえば、obj.__proto__ = {} を実行すると、obj instanceof Foo は false を返します。
例: String オブジェクトと Date オブジェクトがどちらも Object 型に属することを示す
次のコードでは、instanceof を使用して次のことを証明します。 String オブジェクトと Date オブジェクトも Object 型に属します。rreeee
以上がJavaScriptのtypeofとinstanceofの違いの紹介(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。