tips chips

日々の作業で出てきた技術メモの切れ端を置いておくページ

spread operatorでundefinedを展開した時の挙動

配列の中では展開できないのよ、という話

配列や関数の引数で展開した場合

func(...undefined) // Uncaught TypeError: undefined is not iterable (cannot read property undefined) [...undefined] // Uncaught TypeError: undefined is not iterable

オブジェクトで展開した場合

{ a: 'hoge', ...undefined } // { a: 'hoge' }

前者のコンテキストではiterableな値を求められるからエラーになり、後者ではObjectならなんでもいけるからこういう挙動になる。(という理解でいいのかな?)

よく考えればそうか、となるがコードレビューで指摘を受けた時に挙動に不安を覚えたので確かめてみた。

自分は割とよくnullやundefinedをspread operatorで展開するようなコード(下記参照)を書くので、配列への展開はできないことが実はちょっとびっくりした。

const hoge = { ...(condition ? { fuga: 'piyo' } : undefined) }