تفاوت عملگرهای Spread و Rest در جاوااسکریپت

این دو عملگر ظاهر کاملا یکسانی دارن و هر دو بصورت سه‌نقطه ( ... ) هستن.

عملگر Spread

کلمه Spread یعنی گسترش دادن و پخش کردن. عملگر Spread برای زمانی هست که می‌خوایم مقدارهای یک آرایه یا هر چیز Iterable رو گسترش بدیم و پخش کنیم توی یک چیز دیگه. کد زیر رو درنظر بگیرید:

function sum(x, y, z) {
  return x + y + z;
}

const numbers = [1, 2, 3];

تابع sum سه تا آرگومان نیاز داره. متغیر numbers رو در نظر بگیرید. اگه بخوایم از روش قبلی استفاده کنیم، اعداد رو باید به شکل زیر پاس بدیم:

sum(numbers[0], numbers[1], numbers[2]);

اما روش باحال‌تر استفاده از عملگر Spread هست:

sum(...numbers);

این عملگر دقیقا کار مثال قبلی رو انجام داد. مقدارهای ‌‌آرایه numbers رو پخش کرد توی تابع sum. همونطور که می‌بینید کد ما چقدر کوتاه‌تر و خواناتر شد.

عملگر Rest

این عملگر که توی توابع استفاده میشه، به تابع کمک می‌کنه تا بی‌نهایت آرگومان داشته باشه. در واقع یک روش جدیدتر بجای کلمه کلیدی arguments توی توابع هست. تابع sum مثال بالا رو درنظر بگیرید که فقط سه تا آرگومان قبول می‌کرد. با استفاده از پارامتر rest می‌تونیم یک کاری کنیم که بی‌نهایت آرگومان قبول کنه:

function sum(...numbers) {
    return numbers.reduce((total, current) => total + current);
}

sum(1, 2, 3); // 6
sum(1, 2, 3, 11, 12, 13); // 42


منبع:

https://dev.to/macmacky/70-javascript-interview-questions-5gfi