Rest Parameters
ด้วย rest parameter สามารถแทน arguments หลายค่าเป็น array ได้ ES6 นำมาเพื่ออำนวยความสะดวก แสดงด้วย ... นำหน้าพารามิเตอร์
Arguments Object
Arguments object ใน JavaScript คือ object ที่แทน arguments ที่ส่งเข้าฟังก์ชัน
ความแตกต่าง:
- Arguments object รวม ทุก arguments ที่ส่งเข้าฟังก์ชัน ส่วน rest parameters คือ arguments ที่ ไม่ได้มีชื่อ parameter อื่น
- Rest parameters เป็น Array instances (มี map, sort, pop ฯลฯ) ส่วน arguments object ไม่ใช่ array (array-like object)
ตัวอย่างเปรียบเทียบ
function demo(a, b, ...rest) {
console.log('arguments:', arguments); // { 0: 1, 1: 2, 2: 3, 3: 4, length: 4 }
console.log('rest:', rest); // [3, 4] - แค่ arguments ที่ 3 และ 4
console.log('Array.isArray(rest):', Array.isArray(rest)); // true
console.log('Array.isArray(arguments):', Array.isArray(arguments)); // false
// rest สามารถใช้ array methods ได้
rest.forEach(x => console.log(x));
// arguments ต้องแปลงก่อน: Array.from(arguments).forEach(...)
}
demo(1, 2, 3, 4);
ข้อจำกัดของ Arguments Object
- ไม่ใช่ array จริง — ไม่มี
map, filter, reduce, forEach - ไม่ทำงานใน arrow functions (arrow functions ไม่มี arguments)
- ใน strict mode ไม่ sync กับ parameters (non-strict mode sync)
แนะนำ
ใช้ Rest Parameters แทน arguments ทุกกรณี — ทันสมัยกว่า เป็น array จริง ทำงานใน arrow functions ได้