Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ความแตกต่างระหว่าง Rest Parameters และ Arguments Object ใน JavaScript

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 ได้