JavaScript có nhiều tính năng hữu ích cho phép các nhà phát triển làm việc với các mảng và tham số hàm một cách dễ dàng. Trong chương này, các tham số còn lại và cú pháp lây lan được đề cập
Tham số còn lại cung cấp cho bạn một cách mạnh mẽ để làm việc với số lượng tham số không xác định
Để hiểu rõ hơn tham số còn lại là gì, hãy bắt đầu lại từ đầu
Bạn có thể gọi một hàm với số lượng đối số không xác định, bất kể nó có thể được định nghĩa như thế nào
Ví dụ
hàm nhân [x, y] { trả về x * y; . nhật ký [nhân [1, 2, 3, 4, 5]];
Không có lỗi nào có thể xảy ra ở đây, vì các đối số "khủng". Nhưng, chỉ có hai cái đầu tiên được tính trong đầu ra
Bạn có thể bao gồm phần còn lại của các tham số trong định nghĩa hàm bằng ba dấu chấm, như thế này. …. Nó phải được theo sau bởi tên mảng chứa chúng. Nghĩa đen của các dấu chấm là “tập hợp các tham số còn lại thành một mảng. ” Bây giờ, hãy bao gồm ví dụ này
hàm multiAll[. args] { cho kết quả = 1; . log[multiplyAll[1]]; . nhật ký [nhân tất cả [1, 2]]; . nhật ký [nhân tất cả [1, 2, 3]];
Bạn có tùy chọn nhận các tham số đầu tiên vì các biến chỉ thu thập phần còn lại
Trong ví dụ dưới đây, hai đối số đầu tiên đưa vào các biến và phần còn lại - vào mảng bookTitles
chức năng chào mừng Trang web [Tên trang web, Tên sách,. bookTitles] { bảng điều khiển. log[' Chào mừng đến với ' + siteName + '’s ' + bookName + ' book' ]; . log[bookTitles[0]]; . log[bookTitles[1]]; . nhật ký [tên sách. chiều dài];
Vui lòng lưu ý rằng các tham số còn lại phải ở cuối. Khi chúng thu thập tất cả các đối số còn lại, chúng sẽ không có tác dụng gì và chúng có thể gây ra lỗi
function f[arg1, ...rest, arg2] { // arg2 after ...rest!!!!
// error
}
Chúng ta có thể phân biệt một đối tượng giống như mảng duy nhất, được gọi là đối số. Nó bao gồm tất cả các đối số theo chỉ mục của chúng
thích ở đây
chức năng showSiteBooks [] { bảng điều khiển. nhật ký [đối số. chiều dài]; . nhật ký [đối số [0]]; . nhật ký [đối số [1]]; . 2, Javascript, Git showSiteBooks["Javascript", "Git"]; . 1, Html, không xác định [không có đối số thứ hai] showSiteBooks["Html"];
function showSiteBooks[] { // it iterable for[let arg of arguments]{ console. nhật ký [arg];
Điều gây tò mò về các đối số là mặc dù nó vừa giống mảng vừa có thể lặp lại, nhưng nó không phải là một mảng. Các phương thức mảng không thể hoạt động cho nó. Vì vậy, lập luận. bản đồ[. ] không thể được gọi. Hơn nữa, nó luôn bao gồm các đối số tổng thể. Chúng không thể được chụp một phần
Sẽ là tốt nhất nếu bạn nhớ rằng các hàm mũi tên không có "đối số". Nếu bạn quyết định truy cập đối tượng của các đối số từ một hàm mũi tên, bạn có thể lấy cái này
function argFunction[] { let showArgs = [] => console. nhật ký [đối số [0]];
Cú pháp trải rộng cho phép một mảng hoặc một chuỗi mở rộng ở những nơi không có hoặc nhiều đối số hoặc phần tử được mong đợi. Nói cách khác, nếu bạn có một chuỗi, một mảng hoặc một đối tượng và bạn muốn sử dụng tất cả các giá trị, bạn có thể trải chúng thành các lệnh gọi hàm, đối tượng mới hoặc mảng mới bằng một cú pháp ngắn. Mặc dù cú pháp spread giống như tham số nghỉ, cũng dùng dấu ba chấm…, nhưng nó lại làm ngược lại
Bất cứ khi nào bạn sử dụng. arr trong lệnh gọi hàm, nó mở rộng một đối tượng có thể lặp arr thành danh sách các đối số
Trường hợp môn Toán. tối đa trông như sau
để mảng = [6, 8, 2]; . nhật ký [Toán. tối đa [. mảng]];
Bạn cũng có thể vượt qua các lần lặp khác nhau, theo cách này
để mảng1 = [2, -3, 5, 4]; . nhật ký [Toán. tối đa [. mảng1,. mảng2]];
Bạn có thể tích hợp cú pháp lây lan với các giá trị bình thường, như sau
để mảng1 = [2, -3, 5, 4]; . nhật ký [Toán. tối đa [3,. mảng1, 6,. mảng2, 18]];
Cũng nên sử dụng cú pháp trải rộng để hợp nhất các mảng
để mảng = [5, 4, 9]; . mảng, 3,. mảng2]; . nhật ký [đã hợp nhất];
Bạn cũng có thể sử dụng cú pháp trải rộng để biến chuỗi thành một mảng ký tự
Đây là một ví dụ
hãy để str = "W3Docs"; . đăng nhập [[. str]];
Cú pháp trải rộng sử dụng các trình vòng lặp để thu thập các phần tử giống như đối với. của
Mảng. from cũng có thể được sử dụng cho tác vụ đó, vì nó chuyển đổi một iterable thành một mảng, như thế này
hãy để str = "W3Docs"; . from chuyển đổi một iterable thành một array console. nhật ký [Mảng. from[str]];
Nó cho kết quả tương tự như [. str]
Nhưng sự khác biệt tinh tế giữa Array. từ [obj] và [. obj] là cái đầu tiên hoạt động trên cả iterables và array-like, nhưng cú pháp trải rộng chỉ có thể hoạt động với iterables