ホームページ > 記事 > ウェブフロントエンド > JavaScriptのtypeofとinstanceofの違いを深く理解する
今回は主にJavaScriptの型判定関数typeofと判定コンストラクタプロトタイプinstanceofの使い方と注意点についてお話します。
まずtypeofについて話しましょう。まず注意すべきことは、typeof メソッド は データ の型を表す文字列 を返すということです。
まず、各データ型に対応する typeof の値を見てみましょう:
データ型 | Type |
---|---|
未定義 | "未定義" |
ヌル | ” オブジェクト" |
ブール | "ブール値" |
数値 | "数値" |
文字列 | "文字列" |
シンボル(ECMAの新機能)スクリプト 6) | 」シンボル" |
ホストオブジェクト(ブラウザなどのJS環境によって提供される) | 実装依存 |
関数オブジェクト | "関数" |
その他のオブジェクト | "オブジェクト" |
もう一度具体的な例を見てください:
// Numbers typeof 37 === 'number'; typeof 3.14 === 'number'; typeof Math.LN2 === 'number'; typeof Infinity === 'number'; typeof NaN === 'number'; // 尽管NaN是"Not-A-Number"的缩写,意思是"不是一个数字" typeof Number(1) === 'number'; // 不要这样使用! // Strings typeof "" === 'string'; typeof "bla" === 'string'; typeof (typeof 1) === 'string'; // typeof返回的肯定是一个字符串 typeof String("abc") === 'string'; // 不要这样使用! // Booleans typeof true === 'boolean'; typeof false === 'boolean'; typeof Boolean(true) === 'boolean'; // 不要这样使用! // Symbols typeof Symbol() === 'symbol'; typeof Symbol('foo') === 'symbol'; typeof Symbol.iterator === 'symbol'; // Undefined typeof undefined === 'undefined'; typeof blabla === 'undefined'; // 一个未定义的变量,或者一个定义了却未赋初值的变量 // Objects typeof {a:1} === 'object'; // 使用Array.isArray或者Object.prototype.toString.call方法可以从基本的对象中区分出数组类型 typeof [1, 2, 4] === 'object'; typeof new Date() === 'object'; // 下面的容易令人迷惑,不要这样使用! typeof new Boolean(true) === 'object'; typeof new Number(1) ==== 'object'; typeof new String("abc") === 'object'; // 函数 typeof function(){} === 'function'; typeof Math.sin === 'function';
問題が見つかります。つまり、typeof はデータ型を決定するのに正確ではありません。たとえば、配列、正規表現、日付、オブジェクトの戻り値の typeof はすべてオブジェクトであるため、エラーが発生します。
そのため、型を判断する typeof に基づいて、さらにデータ型を判断するために Object.prototype.toString メソッドを使用する必要もあります。
同じデータ型の場合の toString メソッドと typeof メソッドの戻り値の違いを見てみましょう:
data | toString | typeof |
---|---|---|
"foo" | 文字列 | 文字列 |
新しい文字列("foo") | 文字列 | オブジェクト |
新しい数値(1.2) | 数値 | オブジェクト |
本当 | ブール値 | ブール値 |
new ブール値 (true) | ブール | オブジェクト |
new Date() | Date | object |
new | エラーオブジェクト | |
Array | object | |
RegExp | object | |
RegExp | オブジェクト |
以上がJavaScriptのtypeofとinstanceofの違いを深く理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。