型強制 (type coercion)
JavaScriptにはデータ型がありますが、型が異なる2つの値に対し演算してもエラーにならない場合があります。たとえば、文字列型の"1"
から数値型の1
を減算した場合、数値型の0
が計算結果として出てきます。
js
"1" - 1; //=> 0
js
"1" - 1; //=> 0
これは型強制(type coercion)と呼ばれる仕組みがあるためです。型強制とは、型が異なる2つの値を処理するとき、暗黙的に別の型へ変換されることを言います。
上の例では、文字列型の"1"
が数値型の1
に型強制された上で、- 1
が演算されたため0
が計算結果になるわけです。
型に厳しい言語では、型が異なる値同士の演算ができない言語もあるので、そのような言語に慣れている方は特に注意してください。
ちなみに、どんな型に型強制されるかは演算子によっても異なるので注意が必要です。たとえば、文字列型の"1"
に数値型の1
を加算する場合は、文字列型の"11"
が計算結果になります。これは、数値型の1
が文字列型の"1"
に型強制された上で、"1" + "1"
の文字列結合の演算になるためです。
js
"1" + 1; //=> "11"
js
"1" + 1; //=> "11"
学びをシェアする
文字列と数値など型が異なる2つの値を演算するとき、暗黙に型変換される「型強制」がJavaScriptにはある。
"1" - 1; //=> 0
"1" + 1; //=> "11"
『サバイバルTypeScript』より