Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Khác biệt: Rest Parameters vs Arguments Object trong JavaScript


Rest Parameters

ES6. Đại diện nhiều argument thành array. Ký hiệu ... trước tham số.

Arguments Object

Object built-in trong function (non-arrow), đại diện tất cả arguments truyền vào. Array-like (có length, index) nhưng không phải Array.

Sự khác biệt chính

Đặc điểmArguments ObjectRest Parameters
Phạm viTất cả arguments truyền vàoChỉ các argument không có tên riêng (sau các named params)
Kiểu dữ liệuArray-like object (không phải Array)Array thật (instanceof Array = true)
MethodsKhông có .map, .filter, .forEach... phải dùng Array.from()Có đầy đủ Array methods
Arrow functionKhông có arguments objectHoạt động bình thường
Cú phápTự động có sẵnPhải khai báo explicit: function(...rest)
this bindingKhông liên quanKhông liên quan

Ví dụ so sánh

function demo(a, b, ...rest) {
  console.log("a:", a);           // named param
  console.log("b:", b);           // named param
  console.log("rest:", rest);     // Array [3, 4, 5]
  console.log("arguments:", arguments); // Array-like {0:1, 1:2, 2:3, 3:4, 4:5, length:5}
  
  // rest dùng được Array methods
  console.log(rest.map(x => x * 2)); // [6, 8, 10]
  
  // arguments phải convert
  console.log(Array.from(arguments).map(x => x * 2)); // [2, 4, 6, 8, 10]
}

demo(1, 2, 3, 4, 5);

// Arrow function - không có arguments
const arrow = (...rest) => {
  // arguments ở đây là của outer scope (nếu có) hoặc ReferenceError
  console.log(rest); // OK
};

Best Practice

  • Ưu tiên Rest Parameters (ES6): Array thật, dùng được methods, rõ ràng intent, tương thích arrow function.
  • Tránh arguments trừ khi maintain legacy code hoặc cần truy cập tất cả args bao gồm named params.
  • Trong arrow function: chỉ dùng rest parameters.