1. 型typeof 演算子は、評価されていないオペランドの型を示す文字列を返します。次のように使用されます。 オペランドの型 typeof(オペランド) オペランドはオブジェクトまたはプリミティブ値を表す式であり、その型が返されます。たとえば、 typeof 1 // '数値' typeof '1' // '文字列' typeof undefined // 'undefined' typeof true // 'ブール値' typeof Symbol() // 'シンボル' typeof null // 'オブジェクト' typeof [] // 'オブジェクト' typeof {} // 'オブジェクト' typeof コンソール // 'オブジェクト' typeof console.log // 'function' 上記の例では、最初の 6 つが基本データ型です。 typeof null はオブジェクトですが、これは JavaScript の長年のバグにすぎません。null が参照データ型であることを意味するわけではなく、null 自体はオブジェクトではありません。 したがって、typeof の後に null によって返される結果には問題があり、null を判定する方法として使用することはできません。 if ステートメントで null かどうかを確認する必要がある場合は、===null を使用して確認します。 同時に、参照型データも見つけることができます。typeofを使用して判断すると、関数を除いて残りはオブジェクトを出力します。 if(typeof a != 'undefined'){ //変数が存在する} 2. インスタンスinstanceof 演算子は、コンストラクター関数のプロトタイプ プロパティがインスタンス オブジェクトのプロトタイプ チェーンに出現するかどうかを検出するために使用されます。次のように使用されます。 オブジェクトインスタンスコンストラクタ object はインスタンス オブジェクト、constructor はコンストラクタ関数です。コンストラクタ関数は new を通じてオブジェクトをインスタンス化でき、instanceof はこのオブジェクトが前のコンストラクタによって生成されたオブジェクトかどうかを判断できます。 // 構築関数を定義する let Car = function() {} benz = new Car() とします。 benz instanceof Car // true 車 = 新しい文字列('xxx') car インスタンス 文字列 // true str = 'xxx' とします str 文字列のインスタンス // false instanceof の実装原理については以下を参照してください。 関数 myInstanceof(left, right) { // ここではtypeofを使って基本データ型を決定します。そうであれば、直接falseを返します if(typeof left !== 'object' || left === null) は false を返します。 // getProtypeOf は Object オブジェクトの API であり、パラメータのプロトタイプ オブジェクトを取得できます。let proto = Object.getPrototypeOf(left); while(true) { if(proto === null) は false を返します。 if(proto === right.prototype) return true; //同じプロトタイプオブジェクトを見つけてtrueを返す proto = Object.getPrototypeof(proto); } } つまり、同じプロトタイプオブジェクトが見つかるまでプロトタイプチェーンをたどり、trueを返し、そうでない場合はfalseを返します。 3. 違いtypeof と instanceof はどちらもデータ型を決定するメソッドです。違いは次のとおりです。
1. オブジェクト、配列、および null の場合、返される値はオブジェクトです。例えば、typeof(window)、typeof(document)、typeof(null) によって返される値はすべてオブジェクトです。 上記の 2 つの方法には欠点があり、すべてのシナリオのニーズを満たすことができないことがわかります。 一般的にデータ型を検出する必要がある場合は、Object.prototype.toStringを使用してこのメソッドを呼び出し、次のように"[object Xxx]"の形式で文字列を返します。 Object.prototype.toString({}) // "[オブジェクト Object]" Object.prototype.toString.call({}) // 上記と同じ結果ですが、呼び出しもOKです Object.prototype.toString.call(1) // "[オブジェクト番号]" Object.prototype.toString.call('1') // "[オブジェクト文字列]" Object.prototype.toString.call(true) // "[オブジェクト ブール値]" Object.prototype.toString.call(function(){}) // "[オブジェクト Function]" Object.prototype.toString.call(null) //"[オブジェクト Null]" Object.prototype.toString.call(undefined) //"[オブジェクトは未定義です]" Object.prototype.toString.call(/123/g) //"[オブジェクト正規表現]" Object.prototype.toString.call(new Date()) //"[オブジェクト Date]" Object.prototype.toString.call([]) //"[オブジェクト配列]" Object.prototype.toString.call(document) //"[オブジェクト HTMLDocument]" Object.prototype.toString.call(window) //"[オブジェクト Window]" toString の基本的な使い方がわかったので、グローバルなデータ型判定メソッドを実装してみましょう。 関数 getType(obj){ type = typeof obj; とします。 if (type !== "object") { // 最初に typeof 判定を実行します。基本データ型の場合は、戻り値の型を直接返します。 } // typeof の場合、結果は object です。次に、次の判断を行います。通常の結果は return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1'); です。 } 以下のように使用します getType([]) // "Array" typeof [] はオブジェクトなので、toString は getType('123') を返します // "string" typeof は直接 getType(window) を返します // "Window" toString は getType(null) を返します // "Null" は最初の文字が大文字なので、typeof null はオブジェクトなので、toString で判別する必要があります getType(undefined) // "undefined" typeof は直接 getType() を返します // "undefined" typeof は直接 getType(function(){}) を返します // "function" typeof で判別できるので、最初の文字は小文字です getType(/123/g) //"RegExp" toString は 初心者でも js の typeof と instanceof の違いを理解する方法についての記事はこれで終わりです。 js の typeof と instanceof の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。 今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: 時刻を保存するために適切な MySQL の datetime 型を選択する方法
機能: データ表示、テーブルアプリケーションシナリオ。 <table> テーブル<...
JavaScript を使用すると、ハイパーリンクがジャンプするのを防ぐことができます。方法は次の...
目次背景メインコンテンツ1. コンポーネントの比較2. 実装のアイデア3. キーメソッドソースコード...
なお、この記事では、単に 20.04 ソースに変更する方法を説明するのではなく、20.04 に基づい...
目次入力ボックスをクリックして開始します拡張機能入力ボックスをクリックすると複数のイベントが発生しま...
HTML で CSS を使用する 3 つの方法: 1. インラインスタイル: 要素のスタイル属性を通...
1. 解決策1.1 インターフェースコンテキストパスの説明2 つのバックエンド インターフェイス サ...
「スティッキーフッター」とはいわゆる「スティッキー フッター」は、新しいフロントエンドの概念や技術で...
序文2 つのテーブル内の同じフィールドの型が異なっていたり、エンコード タイプが異なっていたりするた...
目次質問: 1. リモートログイン権限を有効にする: 2. MySQLの権限を更新します。 3. テ...
SQL クエリ ステートメントの実行順序は次のとおりです。 (7)選択 (8) DISTINCT &...
Dockerfile を使用すると、ユーザーはカスタム イメージを作成できます。基本構造Docker...
1. 前提条件JDKがインストールされましたecho $PATHソフトリンクを作成し、JDKのインス...
CSS の優先順位について話す前に、CSS とは何か、CSS が何に使用されるのかを理解する必要があ...
この記事では、次のような効果を持つ JS ページング効果の例を紹介します。クールだと思いませんか? ...