JavaScriptで計算をしていると、こんな「えっ?」となる結果に出会うことがあります。
let a = 2026;
let b = '1';
let c = a * b;
console.log(c);
// 2026
let a = 2026;
let b = 'あ';
let c = a * b;
console.log(c);
// NaN
let a = 2026;
let b = 0;
let c = a / b;
console.log(c);
// Infinity
数字を使っているつもりなのに、
結果が 2026 / NaN / Infinity とバラバラ。
今回は、この3つの例を使って
「なぜこうなるのか」 をやさしく説明します。
例1:文字なのに計算できる?
let a = 2026;
let b = '1';
let c = a * b;
console.log(c);
// 2026
ここでのポイントは、b が 文字列 ‘1’ だということです。
普通に考えると、
数字 × 文字列 = エラー?
と思いますよね。
でも JavaScript では、(かけ算)を使うとき、
👉 「数字に変換できそうなら、勝手に数字にする」
という動きをします。
'1'→ 数字の1に変換2026 * 1→ 2026
そのため、結果は 2026 になります。
例2:NaN ってなに?
let a = 2026;
let b = 'あ';
let c = a * b;
console.log(c);
// NaN
今度は b が 'あ' です。
JavaScriptはまた「数字にできるかな?」と考えますが、
'あ'→ 数字に変換できない
そこで出てくるのが NaN です。
NaN の意味
NaN = Not a Number
(数ではありません)
つまりこれは、
「計算しようとしたけど、数字として扱えなかった」
という 結果 です。
エラーではありません。
JavaScript的には「ちゃんとした結果」 です。
例3:Infinity はなぜ出る?
let a = 2026;
let b = 0;
let c = a / b;
console.log(c);
// Infinity
ここでは、「2026 / 0」が行われています。
数学では、0で割ることはできません。
JavaScriptではこの場合、
👉 Infinity(無限)
という値を返します。
Infinity の意味
Infinity = 無限大
JavaScriptは、
「0で割ったからエラー!」
とはせず、
「結果は無限に大きいと考える」
という値を返します。
これも エラーではありません。
なぜJavaScriptはエラーにしないの?
ここがJavaScriptの特徴です。
- できるだけ処理を止めない
- プログラムを動かし続ける
- 結果として NaN や Infinity を返す
つまり、
JavaScriptはとても「寛容」な言語
です。
初心者にとっては「優しい」とも言えますが、
同時に 注意が必要 なポイントでもあります。
初心者が覚えておくと安心な考え方
① 文字と数字は違う
'1' // 文字
1 // 数字
見た目が同じでも、JavaScriptの中では 別物 です。
② NaN や Infinity は「失敗のサイン」
- NaN → 数字として使えなかった
- Infinity → 0で割った可能性が高い
👉「あ、変な計算してるかも」
と気づくためのヒントです。
③ エラーが出ないから安心しない
JavaScriptは、
- 間違っていても動く
- 変な値でも結果を返す
ことがあります。
だからこそ、
- console.logで確認する
- 値の中身を意識する
ことが大切です。
まとめ
'1'は計算の中で数字に変換されることがある- 数字にできない文字は NaN になる
- 0で割ると Infinity が出る
- どれもエラーではない
- JavaScriptは「動かし続ける」言語
最初は不思議に感じますが、これを知っているだけでJavaScriptが一気に理解しやすくなります。
