データ型には大別すると「基本データ型」と「複合データ型」があり、データ処理の対象としてはそれぞれ「基本型」と「参照型」になります。
※1 配列と関数はオブジェクトの特殊な形であり、データ型としては同一です。
方の判定には、次の3通りの方法があります。
| 方法 | サンプルコード | 評価結果※1 | |
|---|---|---|---|
| 1 | typeof | typeof obj |
"object" |
| 2 | instanceof | obj instanceof Date |
true |
| 3 | toString | Object.prototype.toString.call( obj ) |
"[object Date]" |
typeof operandtypeof - JavaScript | MDN
| 型 | 戻り値 |
|---|---|
| 数値※1 | number |
| 文字列※1 | string |
| 論理値※1 | boolean |
| オブジェクト | object |
| 配列 | |
| null | |
| 関数 | function |
| 未定義値 | undefined |
| コアJavaScriptに 含まれないオブジェクト |
実装依存 |
※1 Number、String、Booleanの各オブジェクトおよびRegExpオブジェクトは、objectとなります。
typeof 10; // 'number' typeof new Number( 10 ); // 'object'
typeof 'a'; // 'string' typeof new String( 'a' ); // 'object'
typeof true; // 'boolean' typeof Boolean( true ); // 'boolean' typeof new Boolean( true ); // 'object'
object instanceof constructorinstanceof - JavaScript | MDN
function A() {}
function B() {}
var obj = new A();
obj instanceof A; // true
obj instanceof B; // false
instanceofでの判定結果を、trueを○、falseを×として下表にまとめます。
| オブジェクト | 比較対象 | ||
|---|---|---|---|
| Object | Array | String | |
Object() |
○ | × | × |
{} (オブジェクトリテラル) |
|||
Array() |
○ | ○ | × |
[] (配列リテラル) |
|||
String() ※1 |
○ | × | ○ |
'' (文字列リテラル) ※1 |
× | × | × |
null |
× | × | × |
instanceof演算子の右オペランドに指定するのは、クラス名でなければなりません。JavaScriptのクラスはオブジェクトを初期化するコンストラクタで表されるため、右オペランドにはクラスのコンストラクタ関数の名前を指定します。
new String() instanceof Object; // true new String() instanceof Array; // false new String() instanceof String; // true
データ型は自動で決定されるため、宣言時にそれを意識する必要はありません。ただし異なるデータ型同士での演算では予期せぬ結果を招くことがあるため、そのような場合には明示的な型変換が必要となります。
+演算子は連結演算子、それ以外は算術演算子と解釈されます。
'3' + 2 ; // '32' 2 + '3'; // '23' '3' - 2 ; // 1 2 - '3'; // -1 '3' * 2 ; // 6
'3' + [1,2,3]; // '31,2,3' '3' - [1,2,3]; // NaN