JavaScript - 型変換

型変換

JavaScript での型変換について、下表に示します。

JavaScript での型変換
文字列数値論理値オブジェクト
undefined
null
"undefined"
"null"
NaN
0
false
false
TypeError
TypeError
""
"1.2"
"one"
1
1.2
NaN
false
true
true
new String("")
new String("1.2")
new String("one")
0
-0
NaN
Infinity
-Infinity
1
"0"
"0"
"NaN"
"Infinity"
"-Infinity"
"1"
false
false
false
true
true
true
new Number(0)
new Number(-0)
new Number(NaN)
new Number(Infinity)
new Number(-Infinity)
new Number(1)
true
false
"true"
"false"
1
0
new Boolean(true)
new Boolean(false)
{}
[]
[9]
['a']
function(){}
"[object Object]"
""
"9"
"a"
"[object Object]"
NaN
0
9
NaN
NaN
true
true
true
true
true

数値としての文字列を含む場合、その文字列が数値リテラルに変換されます。数値リテラルとして使えない文字列が含まれる場合は NaN が返されます。

プリミティブ型値は String()Number()Boolean() コンストラクタを呼び出したかのように変換されます。ただし nullundefined は変換が行われず TypeError が発生します。

変換と比較

JavaScript では柔軟に型変換が行われますが、等値演算子 (==) でも等しいかどうかの判定が柔軟に行われます。例えば、以下に挙げる比較はすべて true と判定されます。

null == undefined // この 2 つの値は等しいものとして扱われる。
"0" == 0          // 比較前に、文字列は数値に変換される。
0 == false        // 比較前に、論理値は数値に変換される。
"0" == false      // 比較前に、文字列と論理値は数値に変換される。

明示的な型変換

型変換は自動的に行われますが、明示的に型変換を行わなければならない場合もあります。明示的に型変換を行うには Boolean()Number()String()Object() 関数を使用します。

Number("3")   // 3
String(false) // "false"
Boolean([])   // true
Object(3)     // new Number(3)

JavaScript の演算子には、暗黙に型変換を行うものがあります。+ 演算子を使った文字列連結を行う場合、+ 演算子はオペランドを数値に変換します。

x + "" // String(x) と同じ。

Number クラスには数値を文字列に変換するメソッドとして toFixed()toExponential()toPrecision() の 3 つが定義されています。3 つのメソッドで数値を文字列へ変換すると、必要に応じて四捨五入や末尾への 0 追加が行われます。

toFixed() メソッドは、数値が文字列に変換され、小数点以下は指定した桁数だけ残されます。このメソッドでは指数表現には変換されません。

toExponential() メソッドは、数値は指数表現に変換されます。この指数表現では、整数部が 1 桁で、小数点以下に指定された桁数を持つように変換されます。

toPrecision() メソッドは、有効桁数を指定して数値を文字列に変換できます。有効桁数が数値の整数部よりも桁数が少ない場合には、指数表現に変換されます。

var n = 123456.789;

n.toFixed(0);       // "123457"
n.toFixed(2);       // "123456.79"
n.toFixed(5);       // "123456.78900"

n.toExponential(1); // "1.2e+5"
n.toExponential(3); // "1.235e+5"

n.toPrecision(4);   // "1.235e+5"
n.toPrecision(7);   // "123456.8"
n.toPrecision(10);  // "123456.7890"

Number() 型変換関数と似ている関数として parseInt() 関数と parseFloat() 関数があります。parseInt() 関数は整数、parseFloat() 関数は整数と浮動小数点数を解釈します。文字が数値として解釈できない文字の場合には、NaN が返されます。

parseInt("3 blind mice")   // 3
parseFloat(" 3.14 meters") // 3.14
parseInt("-12.34")         // -12
parseInt("0xFF")           // 255
parseInt("0xff")           // 255
parseInt("-0XFF")          // -255
parseFloat(".1")           // 0.1
parseInt("0.1")            // 0
parseInt(".1")             // NaN
parseFloat("$72.47");      // NaN

parseInt() 関数は 2 番目の引数として 2 (進数) から 36 (進数) までの基数を指定できます。

parseInt("11", 2);   // 3
parseInt("ff", 16);  // 255
parseInt("zz", 36);  // 1295
parseInt("077", 8);  // 63
parseInt("077", 10); // 77

オブジェクトからプリミティブ型への変換

すべてのオブジェクトは true に変換されます。オブジェクトから文字列への変換や、オブジェクトから数値への変換は、変換対象のオブジェクトのメソッドを呼び出すことで行います。オブジェクトには、変換を行うための toString() メソッドと valueOf() メソッドがあります。

toString() メソッドは、オブジェクトを表す文字列を返します。

({x:1, y:2}).toString(); // "[object Object]"

valueOf() メソッドは、オブジェクトを表すプリミティブ型値を返します。ただし、オブジェクトは 1 つのプリミティブ型で表現できないため valueOf() メソッドはオブジェクトを返します。

({x:1, y:2}).valueOf(); // {x: 1, y: 2}

関連記事

JavaScript のまとめページはプログラミング JavaScript 入門を参照してください。

Category:
プログラミング
公開日:
更新日:
Pageviews:
128
Shares:
0
Tag:
JavaScript