0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[JavaScript, TypeScript] スプレット構文 (...) とはなんぞや

Posted at

初めに

これは会社で先輩のコードを見た時によく目にしていまして、
なんか気になったので、調べてみました。

スプレット構文とは

配列式や文字列などの反復可能オブジェクトを、0 個以上の引数 (関数呼び出しの場合) や要素 (配列リテラルの場合) を期待された場所で展開したり、オブジェクト式を、0 個以上のキーと値の組 (オブジェクトリテラルの場合) を期待された場所で展開したりすることができます。

引用: https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax

ちょっと私の頭では何言っとるかわからなかったので、実際に書いて動かしてみました。↓

実際の挙動

const numbers = [1, 2, 3, 4, 5];

console.log('numbers: ', numbers);
console.log('...numbers: ', ...numbers);

// 結果↓↓
// numbers:  [ 1, 2, 3, 4, 5 ]
// ...numbers:  1 2 3 4 5

ほほう……

const sum = (a, b, c, d, e) => {
    return a + b + c + d + e;
};

const numbers = [1, 2, 3, 4, 5];

console.log("numbers: ", numbers);
console.log("...numbers: ", ...numbers);

console.log("sum(numbers): ", sum(numbers));
console.log("sum(...numbers): ", sum(...numbers));

// 結果↓↓
// numbers:  [ 1, 2, 3, 4, 5 ]
// ...numbers:  1 2 3 4 5

// sum(numbers):  1,2,3,4,5undefinedundefinedundefinedundefined
// sum(...numbers):  15

なんかundefinedがいっぱいだー

こんな挙動になるんですね…
それじゃあ、関数の引数も1から順に引数aから入っていくのかしら…

const show = (a, b, c, d, e) => {
    console.log(a, " ", b, " ", c, " ", d, " ", e);
};

const numbers = [1, 2, 3, 4, 5];

show(numbers);
show(...numbers);

// 結果↓↓
// [ 1, 2, 3, 4, 5 ]   undefined   undefined   undefined   undefined
// 1   2   3   4   5

どうやら、順番に入っていくようですね!
これが、さきの文言で言う、

0 個以上のキーと値の組 (オブジェクトリテラルの場合) を期待された場所で展開したりすることができます。

の意味だったのかな?

まとめ

どうだったでしょうか。
めちゃくちゃ初歩的なところでしたが、これが誰かの参考になったりしたら嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?