Arguments trong javascript và cách lấy các giá trị truyền vào hàm | Laptrinhcanban.com

HOME › >>

Arguments trong javascript và cách lấy các giá trị truyền vào hàm

Hướng dẫn cách sử dụng arguments object trong javascript. Bạn sẽ học được cách sử dụng arguments để lấy các giá trị đã truyền vào hàm, cũng như các chú ý khi sử dụng arguments object trong javascript sau bài học này.

Arguments object là gì trong javascript

Arguments trong JavaScript (dịch sang tiếng việt là các đối số) là một đối tượng có tính chất giống như mảng trong JavaScript, có khả năng truy cập được vào bên trong hàm và chứa các giá trị của các đối số đã được truyền cho hàm đó.

Nói nôm na thì arguments chính là một mảng chứa các đối số đã truyền vào hàm trong JavaScript.

Ví dụ chúng ta có hàm tính tổng sau đây:

function sum(a,b,c){
return a + b + c;
}

Giả sử chúng ta gọi hàm và truyền 3 đối số vào hàm như sau:

sum(10,20,30);

Sau khi gọi hàm, các đối số đã truyền vào hàm là 10, 2030 sẽ được lưu vào arguments theo thứ tự, và chúng ta có thể lấy chúng ra tương tự như khi sử dụng mảng, ví dụ như arguments[0] = 10, arguments[1] = 20, arguments[2] = 30 chẳng hạn.

Lưu ý là chúng ta chỉ có thể sử dụng Arguments object ở bên trong hàm JavaScript mà thôi. Và chúng ta cũng không thể sử dụng Arguments ở bên trong các hàm được tạo ra bởi hàm arrow trong JavaScript.

Các đối số truyền vào hàm sẽ được lưu giữ theo thứ tự trong Arguments, và chúng ta có thể lấy chúng ra bằng cách truy cập vào các phần tử trong arguments. Chúng ta cũng có thể truy xuất các thuộc tính của arguments object này, ví dụ như số lượng giá trị đã truyền vào hàm thông qua thuộc tính length chẳng hạn.

Arguments object thường được sử dụng trong các hàm mà chúng ta không quyết định số lượng đối số truyền vào hàm, và tất cả các đối số đều được lưu giữ hết trong Arguments mà không cần quan tâm tới số lượng của chúng là bao nhiêu. Tuy nhiên trong các phiên bản JavaScript mới đã được thêm vào Rest parameters với toán tử ba chấm, do đó ngoài Arguments thì chúng ta cũng có thêm lựa chọn khác khi muốn truyền tham số vào hàm trong JavaScript mà không giới hạn số lượng đối số.

Sau đây chúng ta sẽ cùng tìm hiểu các cách sử dụng Arguments object trong JavaScript.

Tìm số đối số đã truyền vào hàm bằng Arguments object trong JavaScript

Trong JavaScript, số lượng đối số truyền vào hàm và số lượng tham số dùng để nhận đối số không nhất thiết cần phải giống nhau. Giả sử số đối số truyền vào có lớn hơn số tham số sử dụng trong hàm chăng nữa, thì số đối số thừa sẽ không được sử dụng. Hoặc là nếu số đối số có nhỏ hơn số tham số sử dụng trong hàm, thì giá trị mặc định là undefined cũng sẽ được gán vào tham số, và lỗi cũng sẽ không xảy ra.

Giống như thế, khi chúng ta gọi hàm trong JavaScript, số đối số chúng ta truyền vào hàm không nhất định bằng với số tham số chỉ định trong hàm. Trong trường hợp này, chúng ta có thể sử dụng thuộc tính length của Arguments object và tìm số đối số đã truyền vào hàm.

Ví dụ chúng ta tìm số đối số đã truyền vào hàm sau trong JavaScript:

function find_user(name,old){
console.log('arguments.length : ' + arguments.length);
}

find_user('Kiyoshi', 30);
//> arguments.length : 2

find_user('Honda', 20, 'tokyo');
//> arguments.length : 3

find_user('Suzuki');
//> arguments.length : 1

Giống như trên, số lượng đối số thực tế mà chúng ta đã truyền vào hàm sẽ được truy xuất thông qua thuộc tính arguments.length.

Lấy các giá trị truyền vào trong hàm bằng Arguments object trong JavaScript

Giá trị của các đối số truyền vào trong hàm JavaScript sẽ được gán vào các biến có tên (tham số) ở bên trong hàm đó. Tuy nhiên nó cũng còn được lưu giữ một cách riêng biệt trong Arguments object dưới dạng arguments[0],arguments[1]…

Ví dụ chúng ta có thể lấy giá trị truyền vào hàm thông qua Arguments object như sau:

function find_user(name,old){
console.log('name : ' + arguments[0]);
console.log('old : ' + arguments[1]);
}

find_user('Kiyoshi', 30);
//> name : Kiyoshi
//> old : 30

Tất nhiên chúng ta có thể lấy giá trị truyền vào hàm thông qua cả tham số lẫn Arguments object như sau:

function find_user(name,old){
console.log('Lấy name bằng arguments : ' + arguments[0]);
console.log('Lấy name bằng tham số : ' + name;
}

find_user('Kiyoshi', 30);
//> Lấy name bằng arguments : Kiyoshi
//> Lấy name bằng tham số : Kiyoshi

Chúng ta cũng có thể sử dụng arguments trong JavaScript khi cần truyền tham số vào hàm trong JavaScript mà không giới hạn số lượng đối số, do tất cả các đối số này không giới hạn số lượng đều được lưu cả vào trong arguments rồi. Ví dụ:

function find_sum(){
let sum = 0;
for (let i = 0; i < arguments.length; i++){
sum += arguments[i];
}

console.log('sum = ' + sum);
}

find_sum(1, 3, 5);
//> sum = 9

find_sum(7, 12, 3, 2, 8);
//> sum = 32

Chú ý khi sử dụng Arguments trong JavaScript

Trong các hàm được khai báo bởi từ khóa fucntion, bằng hàm tạo (constructor) cũng như là bằng biểu thức hàm với các hàm ẩn danh, chúng ta đều có thể sử dụng Arguments với các cách mà Kiyoshi đã hướng dẫn bạn ở trên.

Tuy nhiên, bạn cần chú ý là chúng ta KHÔNG THỂ sử dụng Arguments trong các hàm được tạo bởi hàm mũi tên (arrow function) JavaScript.

Lỗi Uncaught ReferenceError sẽ xảy ra khi chúng ta vô ý sử dụng Arguments trong hàm tạo bởi arrow function.

let sum_arrow_func = () => {
let sum = 0;
for (let i = 0; i < arguments.length; i++){
sum += arguments[i];
}

console.log('sum = ' + sum);
};

sum_arrow_func(1, 3, 5);
//>> Uncaught ReferenceError: arguments is not defined

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về arguments trong javascript và việc lấy các giá trị đã truyền vào hàm rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về JavaScript trong các bài học tiếp theo.

URL Link

https://laptrinhcanban.com/javascript/javascript-co-ban-den-nang-cao/ham-trong-javascript/arguments-trong-javascript/

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME  › >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.