"合計: " + a + b が期待した数値の合計にならない理由
文字列と数値を+で連続してつなげると、最初の+で文字列に変換されてしまい、それ以降の+はすべて文字列連結として扱われます。数値同士を先に計算したい場合は括弧で明示する必要があります。
なぜエラーが出ないのか
出力: Total: 53
(エラーなし)- JavaScriptは何も報告しません。文法として正しいためです
出力: Total: 53- 実際の挙動 — 期待した結果と食い違っている箇所
見つけ方- エラーが出ないので、出力を目で確かめるか、コードを目で追うしかありません。この種の誤りが最も発見が遅れます
このエラーが出る典型パターン
パターン1
1 const price = 5; 2 const qty = 3; 3 console.log("Total: " + price + qty ); ^
出力: Total: 53期待: Total: 8 (エラーにはなりません)
"Total: " + price + qtyは左から評価されるため、文字列と結合した時点で残りも文字列連結になります。括弧で数値の計算を先に済ませる必要があります。
直し方: price + qty を (price + qty) にします。
広告
広告スロット(未設定)
パターン2
1 const a = 7; 2 const b = 2; 3 console.log("Sum: " + a + b ); ^
出力: Sum: 72期待: Sum: 9 (エラーにはなりません)
括弧が無いと"Sum: " + aの時点で文字列になり、続くbもそのまま連結されます。
直し方: a + b を (a + b) にします。
パターン3
1 const x = 9; 2 const y = 4; 3 console.log("Combined: " + x + y ); ^
出力: Combined: 94期待: Combined: 13 (エラーにはなりません)
数値同士を先に計算してから文字列と結合したい場合は、括弧で優先順位を明示します。
直し方: x + y を (x + y) にします。
よくある誤解
「+が並んでいれば数値同士は先に足し算されるはず」という思い込みは誤りです。+演算子は左から順に評価されるため、一度文字列と結合された時点で残りもすべて文字列連結になります。
まとめ
"合計: " + a + b が期待した数値の合計にならない理由は初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。