Có hai phương pháp kể từ ES2015.
Đối tượng này được xây dựng thành các hàm và nó tham chiếu một cách thích hợp các đối số của hàm. Về mặt kỹ thuật, đây không phải là một mảng, do đó, các hoạt động mảng điển hình sẽ không hoạt động trên đó. Phương pháp được đề xuất là sử dụng Array.from
hoặc toán tử trải để tạo một mảng từ nó.
Tôi đã thấy các câu trả lời khác đề cập đến bằng cách sử dụng slice
. Đừng làm vậy. Nó ngăn chặn tối ưu hóa (nguồn: MDN ).
Array.from(arguments)
[...arguments]
Tuy nhiên, tôi sẽ cho rằng đó arguments
là vấn đề vì nó che giấu những gì một chức năng chấp nhận làm đầu vào. Một arguments
hàm thường được viết như thế này:
function mean(){
let args = [...arguments];
return args.reduce((a,b)=>a+b) / args.length;
}
Đôi khi, tiêu đề hàm được viết như sau để ghi lại các đối số theo kiểu C:
function mean(/* ... */){ ... }
Nhưng đó là hiếm.
Đối với lý do tại sao nó có vấn đề, lấy C, ví dụ. C tương thích ngược với một phương ngữ tiền ANSI cổ của ngôn ngữ được gọi là K & R C. K & R C cho phép các nguyên mẫu hàm có một danh sách đối số trống.
int myFunction();
/* This function accepts unspecified parameters */
ANSI C cung cấp một phương tiện cho varargs
( ...
) và void
để chỉ định một danh sách đối số trống.
int myFunction(void);
/* This function accepts no parameters */
Nhiều người vô tình khai báo các hàm với một unspecified
danh sách đối số ( int myfunction();
), khi họ mong đợi hàm sẽ lấy các đối số bằng không. Đây là một lỗi kỹ thuật vì chức năng sẽ chấp nhận đối số. Bất kỳ số lượng của họ.
Một varargs
hàm thích hợp trong C có dạng:
int myFunction(int nargs, ...);
Và JavaScript thực sự có một cái gì đó tương tự như thế này.
Tôi đã cho bạn thấy toán tử lây lan, thực sự.
...name
Nó khá linh hoạt và cũng có thể được sử dụng trong danh sách đối số của hàm ("tham số phần còn lại") để chỉ định các biến đổi theo kiểu tài liệu độc đáo:
function mean(...args){
return args.reduce((a,b)=>a+b) / args.length;
}
Hoặc như một biểu thức lambda:
((...args)=>args.reduce((a,b)=>a+b) / args.length)(1,2,3,4,5); // 3
Tôi rất thích các toán tử lây lan. Nó là sạch sẽ và tự tài liệu.
for - in
vòng lặp vớiarguments
đối tượng - một 'bình thường' cho vòng lặp lặp lại trên thuộclength
tính nên được sử dụng thay thế