يحتوي JavaScript على عامل ... مدمج يسهّل التعامل مع عدد غير محدد من العناصر. واعتمادًا على السياق، يُسمى إما عامل الباقي أو عامل النشر.
عندما تظهر ... في الجانب الأيسر من إسناد، تُعرف تلك النقاط الثلاث باسم العامل rest. وتُسمى النقاط الثلاث مع اسم متغير عنصر الباقي. وهو يجمع صفرًا أو أكثر من القيم، ويخزّنها في مصفوفة واحدة.
const [a, b, ...everythingElse] = [0, 1, 1, 2, 3, 5, 8];
a;
// => 0
b;
// => 1
everythingElse;
// => [1, 2, 3, 5, 8]
لاحظ أن عنصر rest في JavaScript، خلافًا لبعض اللغات الأخرى، لا يمكن أن يكون له فاصلة زائدة. يجب أن يكون العنصر الأخير في إسناد التفكيك. المثال أدناه يرمي SyntaxError:
const [...items, last] = [2, 4, 8, 16]
على غرار المصفوفات، يمكن أيضًا استخدام عامل الباقي لجمع خاصية واحدة أو أكثر من خصائص كائن وتخزينها في كائن واحد.
const { street, ...address } = {
street: 'Platz der Republik 1',
postalCode: '11011',
city: 'Berlin',
};
street;
// => 'Platz der Republik 1'
address;
// => {postalCode: '11011', city: 'Berlin'}
عندما تظهر ... في تعريف دالة بجانب وسيطها الأخير، يُسمى ذلك المعامل معامل الباقي. وهو يسمح للدالة بقبول عدد غير محدد من الوسائط على هيئة مصفوفة.
function concat(...strings) {
return strings.join(' ');
}
concat('one');
// => 'one'
concat('one', 'two', 'three');
// => 'one two three'
عندما تظهر ... في الجانب الأيمن من إسناد، يُعرف باسم العامل spread. وهو يوسّع مصفوفة إلى قائمة عناصر. وخلافًا لعنصر الباقي، يمكن أن يظهر في أي مكان داخل تعبير مصفوفة حرفي، ويمكن أن يكون هناك أكثر من واحد.
const oneToFive = [1, 2, 3, 4, 5];
const oneToTen = [...oneToFive, 6, 7, 8, 9, 10];
oneToTen;
// => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
const woow = ['A', ...oneToFive, 'B', 'C', 'D', 'E', ...oneToFive, 42];
woow;
// => ["A", 1, 2, 3, 4, 5, "B", "C", "D", "E", 1, 2, 3, 4, 5, 42]
على غرار المصفوفات، يمكن أيضًا استخدام عامل النشر لنسخ الخصائص من كائن إلى آخر.
let address = {
postalCode: '11011',
city: 'Berlin',
};
address = { ...address, country: 'Germany' };
// => {
// postalCode: '11011',
// city: 'Berlin',
// country: 'Germany',
// }