データ型には大別すると「基本データ型」と「複合データ型」があり、データ処理の対象としてはそれぞれ「基本型」と「参照型」になります。
配列と関数はオブジェクトの特殊な形であり、データ型としては同一です。
| コード | 評価結果 |
|---|---|
typeof new Date() |
"object" |
new Date() instanceof Date |
true |
Object.prototype.toString.call( new Date() ) |
"[object Date]" |
| 型 | 返値 |
|---|---|
| 数値 ※ | number |
| 文字列 ※ | string |
| 論理値 ※ | boolean |
| オブジェクト | object |
| 配列 | |
| null | |
| 関数 | function |
| 未定義値 | undefined |
| コアJavaScriptに 含まれないオブジェクト |
実装依存 |
instanceof演算子の右オペランドに指定するのは、クラス名でなければなりません。JavaScriptのクラスは、オブジェクトを初期化するコンストラクタで表されます。よって右オペランドには、クラスのコンストラクタ関数の名前を指定します。
'a' instanceof Stringは、trueとならない文字列リテラルはStringオブジェクトではないため、'a' instanceof Stringはtrueとはなりません。
文字列リテラルは String オブジェクトとは別物 - String Object - MDN Docs
| コード | 評価結果 | |
|---|---|---|
| instanceof | 'a' instanceof String |
false |
new String( 'a' ) instanceof String |
true |
|
| typeof | typeof 'a' |
"string" |
typeof new String( 'a' ) |
"object" |