RESTパラメータ構文の理解


RESTパラメータ構文へようこそ.それは、広げられたオペレーターのようです!


...を除く.
私はJavaScript言語で...シンボルの繰り返し使用を正当化していないことを前向きに言いたい.しかし、うまくいけば、このポストは、どのように広がると残りの部分が異なるが、似て理解するのに役立ちます.

休憩用ユースケース


関数に引数を渡す必要があるとしましょう.それは残りのパラメータを使用するときです!
function testRest(arg1, arg2, ...otherArgs) {
   console.log(arg1) // 1
   console.log(arg2) // 2
   console.log(otherArgs) // [3, 4, 5]

}

testRest(1, 2, 3, 4, 5)
本実施例では、arg1およびarg2が予想通り通過され、それからすべての追加の引数がotherArgsアレイに追加される.
利点の一つは、otherArgsは本当に配列です.つまり、すべての配列関数が利用可能です.
内部の引数の数を見ることができます.
function testRest(arg1, arg2, ...otherArgs) {
   const numOfArgs = otherArgs.length() // 3

}

testRest(1, 2, 3, 4, 5)
また、配列のプロトタイプ関数を使用して操作することもできます.mapfilterreduceflatなど.

単一追加引数


1つは、otherArgsが常に配列を作成するということです.つまり、単一の引数が配列でラップされることになります.
function testRest(arg1, arg2, ...otherArgs) {
   console.log(arg1) // 1
   console.log(arg2) // 2
   console.log(otherArgs) // [3]

}

testRest(1, 2, 3)
さらに、どんな追加引数も含めないなら、空の配列に終わります.
function testRest(arg1, arg2, ...otherArgs) {
   console.log(arg1) // 1
   console.log(arg2) // 2
   console.log(otherArgs) // []

}

testRest(1, 2)

破壊を覚えていますか?


あなたが破壊的な割り当ての上で速いリフレッシュを必要とするならば、このポストをチェックしてください.


このように、破壊と残りのパラメータを一緒に使用できます.
function testRest(...[first, second, third]) {
   console.log(first) // 1
   console.log(second) // 2
   console.log(third) // 3

}

testRest(1, 2, 3)
破壊は、引数がそこにあることを期待します.あなたがその契約を破るならば、あなたは何を予想するべきかについてわかっていなければなりません.
破壊された期待された引数を含んでいないならば、それは未定義の参照に終わります.
function testRest(...[first, second, third]) {
   console.log(first) // 1
   console.log(second) // 2
   console.log(third) // undefined

}

testRest(1, 2)
あなたが破壊したものを越えて引数を含めると、その引数は削除されます.
function testRest(...[first, second, third]) {
   console.log(first) // 1
   console.log(second) // 2
   console.log(third) // 3
   // 4 is not destructured

}

testRest(1, 2, 3, 4)

結論


そして、あなたはそれを持っている!上の例で見ることができるように、残りの部分との間の主な違いは、場所です.
スプレッド構文は関数の中で、または関数を呼び出すときに現れることができます.RESTパラメータ構文は関数シグネチャ自体に制限されます.どちらが使用されているかを判断しようとしている場合は、そのことを覚えておいてください.
あなたがより良い概念を理解するのを助けたことを願っています.
いつものように、このような概念に興味があれば、これらの記事をチェックしてください.