join とは何か
join は「配列の要素を“区切り文字”でつないで、ひとつの文字列を作る」メソッドです。元の配列は変更されない非破壊操作で、返り値は常に文字列です。ここが重要です:区切り文字(セパレーター)は任意で、未指定ならカンマ、空文字を指定すると“区切りなし”で連結できます。要素は文字列化されてから連結されるため、数値や日付、オブジェクトは“文字列へ変換する手順”を意識しましょう。
基本の使い方と区切り文字の指定
カンマ区切りが既定値(CSVの基礎)
const a = ["pen", "book", "note"];
console.log(a.join()); // "pen,book,note"(既定は ",")
console.log(a.join(", ")); // "pen, book, note"(見やすく)
JavaScriptここが重要です:join の既定区切りは「カンマ」。人に見せる文字列は「“, ”」のようにスペースを含めると読みやすくなります。
区切りなしで連結(空文字)
const digits = [2, 0, 2, 5];
console.log(digits.join("")); // "2025"
JavaScriptここが重要です:空文字を渡すと“並べるだけ”。大量の断片を連結して文字列を組み立てるときに使えます。
任意の文字・記号で連結
const path = ["users", 123, "posts", 45];
console.log(path.join("/")); // "users/123/posts/45"
JavaScriptここが重要です:URL やファイルパスなど“区切りが決まっている文字列”は join の得意分野。先頭・末尾のスラッシュを別途管理すると崩れません。
要素の“文字列化”の仕組みと注意点
null・undefined・空スロットの扱い
console.log([undefined, null, 1].join("-")); // "--1"
console.log(Array(3).join("-")); // "--"(疎配列の“穴”は空文字)
JavaScriptここが重要です:undefined と null は空文字として扱われます。疎配列(穴)も同様に空文字になり、“区切りだけが続く”結果を招くことがあるため、事前に埋める/除外する設計が安全です。
配列やオブジェクト要素は“そのままだと読みにくい”
console.log([[1,2],[3]].join("|")); // "1,2|3"(配列は自動で "," 連結)
console.log([{id:1},{id:2}].join("|")); // "[object Object]|[object Object]"
JavaScriptここが重要です:そのまま join すると意図しない文字列になります。必要なプロパティへ map してから join するのが定石です。
const users = [{id:1,name:"A"},{id:2,name:"B"}];
console.log(users.map(u => `${u.id}:${u.name}`).join(" | ")); // "1:A | 2:B"
JavaScript数値のフォーマットを先に行う
const prices = [1000, 2500, 300];
const fmt = new Intl.NumberFormat("ja-JP");
console.log(prices.map(p => fmt.format(p)).join(", ")); // "1,000, 2,500, 300"
JavaScriptここが重要です:join は“連結”だけ。表示用の整形(桁区切り、小数桁)は map で済ませてから join します。
CSV・TSV を安全に作るときのポイント(重要)
値中の区切りや改行・引用符を“エスケープ”
function csvEscape(value) {
const s = String(value ?? "");
const needsQuote = /[",\r\n]/.test(s);
const body = s.replace(/"/g, '""'); // ダブルクォートを二重化
return needsQuote ? `"${body}"` : body;
}
const row = ['Alice', 'a,b', 'He said "Hi"\nNew line'];
console.log(row.map(csvEscape).join(","));
// "Alice","a,b","He said ""Hi""
// New line"
JavaScriptここが重要です:CSV は「区切り・改行・引用符」を含む値を正しく表現するために“引用+二重化”が必要です。単純な join だけでは壊れます。
見出し+複数行を組み立てる
const rows = [
["name","comment"],
["Alice","hello"],
["Bob","a,b"] // カンマあり
];
const csv = rows.map(r => r.map(csvEscape).join(",")).join("\r\n");
JavaScriptここが重要です:行ごとに“セルを join”、最後に“行を join”。改行は \r\n にすると一般的な表計算ソフトで互換性が高いです。
実用レシピ(ログ・ひな型・テンプレート)
ログ行の組み立て
const fields = ["INFO", new Date().toISOString(), "User logged in"];
console.log(fields.join(" | ")); // "INFO | 2025-12-15T01:50:00.000Z | User logged in"
JavaScriptここが重要です:区切りに「 | 」など目立つ記号を使うと、分析や検索がしやすくなります。
箇条書きテキスト(視認性の良い改行区切り)
const bullets = ["スピード", "安全", "読みやすさ"];
console.log(bullets.join("\n- ")); // "スピード\n- 安全\n- 読みやすさ"
JavaScriptここが重要です:改行と記号を工夫して視認性を上げる。UI と連携するなら HTML 側の整形に合わせます。
キー=値の並び
const pairs = [["id", 1], ["name", "Alice"]];
console.log(pairs.map(([k,v]) => `${k}=${v}`).join("&")); // "id=1&name=Alice"
JavaScriptここが重要です:クエリ文字列風の整形は「map で“形”を作り、join で“つなぐ”」が基本パターンです。
パフォーマンスと設計の指針
多数の断片連結は join が読みやすく安定
長い文字列を段階的に作るとき、配列に断片を push して最後に join(“”) する手法は、可読性とパフォーマンスのバランスが良いです。テンプレート文字列(バッククォート)で十分な場面も多いので、意図が伝わる方を選びましょう。
事前に“正規化してから”連結
大小の統一、トリム、数値のフォーマット、危険文字のエスケープなどは join 前(map 内)で済ませます。join は“並べるだけ”に徹すると、役割分離でバグが減ります。
疎配列の穴に注意
Array(100).join(“,”) のようなコードは“99 個のカンマ”になります。意図どおりの行数・列数かを確認し、必要なら fill で初期化してから使いましょう。
console.log(Array(3).fill(0).join(",")); // "0,0,0"
JavaScriptまとめ
join は「配列要素を区切り文字で連結して、ひとつの文字列を作る」非破壊メソッドです。既定はカンマ、空文字で区切りなし、要素は文字列化されます。undefined・null・疎配列の穴は空文字として扱われるため、事前の正規化や欠損処理を意識するのが安全です。配列・オブジェクトは map で“表示用の形”へ変換してから join。CSV のようなフォーマットは“エスケープ”が必須。役割分離(整形は map、連結は join)を徹底すれば、初心者でも意図通りで壊れにくい文字列生成が短く明確に書けます。
