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