join() — 配列を1本の文字列にする

join() は要素を区切り文字で繋ぎます。null と undefined が空文字になること、区切りを省くとカンマになること、入れ子の配列が平らに見えることまで実行して確かめます。

実行して検証済み処理系Node 22.22.3対応ES1難易度○○○○目安6更新
example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
1-2-3 1,2,3 true
javascript
console.log([1, null, undefined, 2].join('-'));
1---2

引数を省くとカンマになります。空文字にしたいなら join('') と明示してください。

元の配列は変わりません。返るのは新しい文字列です。

nullundefined は空文字になる

ここがいちばん事故になります。

example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
1-2
example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
0--false-a

消えるのは値だけで、区切り文字は残ります。- が並んでいる」ことでしか気づけません。

落としたいなら、先に取り除いてください。

example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
3 1--2
example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
1,2-3

v != nullnullundefined の両方に当たります。ここでは意図した書き方です。

0 や空文字は残ります。

example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
1-2-3
example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
1,2 1,2 1,2 1,2

false'false' になり、空文字だけが消えたように見えます。

穴も空文字になる

example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
[ 1, 2, 3 ] [ 1, 2, 4, 5, [ 6 ] ] [ 1, 2 ]
example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
[ '1', '2', '3' ] [ 1, 2, 3 ]

穴と undefined繋いだ後では見分けが付きません。

入れ子は平らに見える

javascript
const names = ['田中', '佐藤・鈴木'];
const joined = names.join('・');

console.log(joined);
console.log(joined.split('・').length);
田中・佐藤・鈴木 3

内側の配列は、自分のカンマで繋がれてから外側に並びます。 指定した区切りが効くのはいちばん外側だけです。

平らにしてから繋いでください。

入れ子の配列を平らにする

toString()String() との関係

どれも join() を呼んでいます。 区切りはカンマで固定です。

配列をそのまま文字列に混ぜると、この形になります。 意図してカンマ区切りにしたのか、うっかり混ざったのかが読み手に伝わりません。 繋ぐつもりなら join() と書いてください。

concat() は別のもの

join()文字列を返し、concat()配列を返します。

配列は1段だけ開かれ、それ以外はそのまま入ります。 a は変わっていません。

いまはスプレッド構文で書くほうが多いです。 concat() が要るのは、配列かどうか分からないものを混ぜるときです。要素なら1つとして、配列なら開いて入ります。スプレッド構文と残余

逆向き:文字列を配列に戻す

戻ってくるのは文字列です。数として使うなら変換が要ります。 → String.prototype.split()

区切り文字が値の中にも入っていると、戻せません。

2件だったものが3件になりました。 値に含まれない区切りを選ぶか、JSON にしてください。 → JSON.parse() と JSON.stringify()

まとめ

  • 引数を省くとカンマ。空文字なら join('') と書く
  • null / undefined / 穴は空文字になり、区切りだけが残る
  • 0false は残る
  • 入れ子は内側がカンマで繋がれる。先に flat()
  • String()${}+ も、中では join() を呼んでいる
  • concat() が返すのは配列
  • 値に区切り文字が入っていると元に戻せない

この記事の根拠

  1. Array.prototype.join — ECMAScript® 2026 Language Specificationtc39.es
  2. Array.prototype.concat — ECMAScript® 2026 Language Specificationtc39.es
  3. Array.prototype.join() — MDNdeveloper.mozilla.org

掲載しているコード例は、公開前に読み手が押したときに動くのと同じもので実行して出力を突き合わせています。結果はリポジトリに残しています。

このページの原文(Markdown)