JavaScriptの文字列連結をやさしく理解する
はじめてのコードって、ちょっとした違いで結果がガラッと変わります。だからこそ、「なぜそうなるか」を腹落ちさせることが大事。ここでは、JavaScriptの「文字列をつなげる」仕組みを、手を動かしながらわかりやすく掘り下げます。
基本の「+」演算子
- 役割:
+は「数値の足し算」と「文字列の連結」の両方をします。 - ルール: 式の中に文字列が1つでも入ると、連結モード(文字列としてつなげる)になります。
console.log('東京' + '駅'); // → 東京駅
console.log(2 + 3); // → 5(足し算)
console.log('合計:' + 2 + 3); // → 合計:23(文字列連結に切り替わった)
JavaScript文字列に“巻き込まれる”しくみ
- 自動変換: 文字列と連結すると、数値や真偽値も文字列に変換されます。
console.log(200 + '円'); // → 200円
console.log('結果は' + true + 'です'); // → 結果はtrueです
JavaScript- 変数も同じ: 変数の中身が数値でも、連結すると文字列になります。
let price = 200;
console.log('値段は' + price + '円'); // → 値段は200円
JavaScript配列やオブジェクトを連結したら?
- 配列はカンマ区切り: 配列を文字列にすると、要素がカンマで並びます。
let fruits = ['Orange', 'Apple', 'Grape'];
console.log('商品: ' + fruits); // → 商品: Orange,Apple,Grape
JavaScript- オブジェクトは[object Object]: そのままだと読みづらいので、
JSON.stringifyを使うと見やすくなります。
let user = { name: 'Taro', age: 20 };
console.log('ユーザー: ' + user); // → ユーザー: [object Object]
console.log('ユーザー: ' + JSON.stringify(user)); // → ユーザー: {"name":"Taro","age":20}
JavaScript演算の順序がすべてを決める
- 左から順番:
+は左から評価されます。最初に数値同士なら足し算、途中で文字列が登場すると、その先は連結になりがち。
console.log(100 + 80 + '円'); // → 180円(先に足し算が終わる)
console.log('値段は' + 100 + 80); // → 値段は10080(途中から文字列連結)
JavaScript- かっこで意図を固定: 計算してから連結したいときは
()を使う。
console.log('値段は' + (100 + 80) + '円'); // → 値段は180円
JavaScriptよくある落とし穴と回避法
- 数字をつなげたいのに足し算にならない? 文字列が混ざると連結になります。数値の合計を先に作ってから、文字列にするのが安全。
let a = 10, b = 20;
// 悪い例
console.log('合計:' + a + b); // → 合計:1020
// 良い例
console.log('合計:' + (a + b)); // → 合計:30
JavaScript- 空文字が紛れ込むと… 未定義や空文字の連結で意図しない結果になりやすい。
nullやundefinedをチェック。
let name;
console.log('こんにちは、' + name + 'さん'); // → こんにちは、undefinedさん
// 回避
console.log('こんにちは、' + (name ?? 'ゲスト') + 'さん'); // → こんにちは、ゲストさん
JavaScriptテンプレートリテラルでスッキリ
- 記法: バッククォート
`…`と${...}を使うと、可読性が段違い。
let price = 180;
let item = 'りんご';
console.log(`商品名: ${item} / 値段: ${price}円`);
// → 商品名: りんご / 値段: 180円
JavaScript- 複雑な式もOK:
let taxRate = 0.1;
let base = 200;
console.log(`税込み: ${Math.round(base * (1 + taxRate))}円`);
// → 税込み: 220円
JavaScriptハンズオン例題
例題1: レシートメッセージを作る
- 目標: 商品名、数量、単価から「合計◯円です」を作る。
let item = 'バナナ';
let qty = 3;
let unit = 120;
// NG(意図が伝わりにくい)
console.log('合計' + qty * unit + '円です');
// OK(順序を明示)
let total = qty * unit;
console.log(`商品: ${item} / 数量: ${qty} / 合計: ${total}円です`);
JavaScript例題2: ユーザー一覧文を出す
- 目標: 配列の名前を「Aさん、Bさん、Cさん」の形にする。
let users = ['山田', '佐藤', '田中'];
// そのまま連結するとカンマ区切り
console.log('参加者: ' + users); // → 参加者: 山田,佐藤,田中
// 読みやすく「さん」付けに
let labeled = users.map(name => `${name}さん`).join('、');
console.log(`参加者: ${labeled}`); // → 参加者: 山田さん、佐藤さん、田中さん
JavaScript例題3: 未入力を丁寧に扱う
- 目標: 名前が未入力なら「ゲスト」を表示。
function greeting(name) {
// null/undefined/空文字をまとめて扱う
let safe = name?.trim() ? name.trim() : 'ゲスト';
return `こんにちは、${safe}さん`;
}
console.log(greeting('')); // → こんにちは、ゲストさん
console.log(greeting(' 太郎 ')); // → こんにちは、太郎さん
console.log(greeting()); // → こんにちは、ゲストさん
JavaScript練習問題(自分の手で確かめる)
- 税計算メッセージを作る
- 入力:
price = 550,tax = 0.1 - 出力例:
税込価格は605円です - ヒント: 合計を計算してから連結、またはテンプレートリテラル。
- 入力:
- ログ行を生成
- 入力:
level = 'INFO',message = '処理完了',time = '12:03' - 出力例:
[12:03][INFO] 処理完了 - ヒント: 文字列の並び順を意識して、かっこも含めて連結。
- 入力:
- 配列の最後に句点
- 入力:
words = ['今日は', '良い', '天気'] - 出力例:
今日は 良い 天気。 - ヒント:
join(' ')と最後に+ '。'、またはテンプレートで。
- 入力:
まとめの指針
- 計算は先に終わらせてから連結する。
- 未定義値は安全に置き換える(
??やチェック)。 - 複雑になったらテンプレートリテラルで可読性を上げる。
- 配列やオブジェクトは、そのまま連結せず整形してから使う。
もし「これってなんでこうなる?」って詰まったら、実際に1行ずつ出力して順番を確認してみて。自分の目で確かめるほど、理解は深く定着します。

