データ型

データ型には大別すると「基本データ型」と「複合データ型」があり、データ処理の対象としてはそれぞれ「基本型」と「参照型」になります。

※1 配列と関数はオブジェクトの特殊な形であり、データ型としては同一です。

型の判定

方の判定には、次の3通りの方法があります。

  1. typeof演算子 … 値のデータ型を表す文字列を返す。
  2. instanceof演算子 … 左側のオブジェクトが、右側のクラスのインスタンスであればtrueを返す。
  3. Object.prototype.toString.call() … オブジェクトのtoString()メソッドの文字列を返す。
  方法 サンプルコード 評価結果※1
1 typeof
typeof obj
"object"
2 instanceof
obj instanceof Date
true
3 toString
Object.prototype.toString.call( obj )
"[object Date]"
※1 Firefox 6 + Firebug 1.8による結果

typeof演算子

typeof operand
typeof - JavaScript | MDN
typeof演算子の戻り値
戻り値
数値※1 number
文字列※1 string
論理値※1 boolean
オブジェクト object
配列
null
関数 function
未定義値 undefined
コアJavaScriptに
含まれないオブジェクト
実装依存

※1 NumberStringBooleanの各オブジェクトおよび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'

instanceof演算子

object instanceof constructor
instanceof - JavaScript | MDN
function A() {}
function B() {}

var obj = new A();

obj instanceof A; // true
obj instanceof B; // false

instanceofでの判定結果を、trueを○、falseを×として下表にまとめます。

[オブジェクト instanceof 比較対象]の比較結果
オブジェクト 比較対象
Object Array String
Object() × ×
{} (オブジェクトリテラル)
Array() ×
[] (配列リテラル)
String() ※1 ×
'' (文字列リテラル) ※1 × × ×
null × × ×
※1 文字列リテラルとStringオブジェクトは異なります

instanceof演算子のクラス名の指定方法

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

参考

参考書

  • JavaScript 第5版 [オライリー・ジャパン] David Flanagan
    3章「データ型と値」