Series về ES6: Rest params, Destructuring and For...of
Trong phần trước thì chúng ta đi tìm hiểu về cách khai báo biến và một vài chức năng mới. Trong phần tiếp theo của series, chúng ta tiếp tục đi giới thiệu về
- Rest params
- Destructuring
- For...of
- Rest params
ES6 cung cấp thêm cho người dùng một loại tham số mới gọi là rest params có tiền tố là dấu ba chấm (...). Nó cho phép biểu diễn số lượng vô hạn các đối số dưới dạng mảng.
const [a, b, ...arr] = [1, 2, 3, 4, 5]
console.log(arr) // [3, 4, 5]
//object
function myFunc(a, b, ...args) {
console.log(args)
}
myFunc({a: 1}, {b: 2}, {c: 3}, {d: 4}); // {c: 3}, {d: 4}
Lưu ý rằng các tham số còn lại phải nằm ở cuối danh sách đối số. Đoạn mã sau sẽ dẫn đến lỗi:
const [a, ...arr, b] = [1, 2, 3, 4, 5]
console.log(arr) // SyntaxError: Rest element must be last element
Sử dụng với arrow function:
Trong một arrow function không có truyền vào đối tượng arguments. Do vậy, nếu muốn truyền một đối số cho arrow function, chúng ta có thể dử dụng rest parameters.
const username = (...name) => {
return name.reduce(function (prev, curr) {
return prev + " " + curr;
});
}
let fullName = username("Hello", "my", "name");
console.log(fullName) // Hello my name
2. Destructuring
Destructuring là một cách thức mà nó cho phép bạn gán các thuộc tính của một Object hoặc một Array. Đây là kỹ thuật giúp chúng ta tạo ra các variable bằng cú pháp ngắn gọn và bớt lặp lại code.
- Sử dụng để khởi tạo giá trị mặc định là thành phần của array hoặc thuộc tính của object là undefined:
Ví dụ Array
const [age = 0, name] = [undefined, "Haposoft"];
console.log(age); // Output: 0
console.log(name); // Output: Haposoft
Ví dụ Object
const { age = 0, name } = { age: undefined, name: "Haposoft" };
console.log(age); // Output: 0
console.log(name); // Output: Haposoft
- Nếu muốn lấy một thuộc tính ở sâu trong một object:
Cách lấy giá trị thông thường
// Nếu muốn lấy firstName
const { person } = { person: { fullName: { firstName: "Hapo", lastName: "soft" }, {age: 20} } };
const { fullName } = person;
const { firstName } = fullName;
console.log(firstName) //Output: Hapo
Cách lấy giá trị ngắn gọn với object
// Nếu muốn lấy firstName
const { person: { fullName: { firstName } } } = { person: { fullName: { firstName: "Hapo", lastName: "soft" }, age: 18 } };
console.log(firstName) //Output: Hapo
- Giúp ích trong việc tránh khởi tạo bị trùng tên biến trong phạm vi
const name = "Haposoft";
const { name } = { person: { name: "Haposoft" } };
console.log(name) // SyntaxError: Identifier 'name' has already been declared
Có thể khai báo lấy object để tránh bị trùng lặp tên biến
const name = "Haposoft";
const { person: { name: anotherName } } = { person: { name: "Haposoft" } };
console.log(anotherName) // Output: Haposoft
3. For...of
For of
mới được sử dụng trong ES6 còn For in
thì đã được sử dụng trong javascript từ trước. For of
giống với spread operator, cũng chỉ sử dụng được với các interable object.
//array
const currencies = ['Dong', 'USD', 'euro', 'yuan'];
for (const index in currencies) {
console.log(index, currencies[index]);
}
// 0 Dong
// 1 USD
// 2 euro
// 3 yuan
for (const value of currencies) {
console.log(value);
}
// Dong
// USD
// euro
// yuan
for of
bao gồm cả key, value:
for (const [index, value] of currencies.entries()) {
console.log(value);
}
// 0 Dong
// 1 USD
// 2 euro
// 3 yuan
for of
khá là đa năng khi nó có thể thực hiện loop với array, object, DOM nodes.
//object
const ratings = [
{user: 'John',score: 3},
{user: 'Jane',score: 4},
{user: 'David',score: 5},
{user: 'Peter',score: 2},
];
let sum = 0;
for (const {score} of ratings) {
sum += score;
}
console.log(`Total scores: ${sum}`);
4. Tổng kết
Hy vọng những thứ mình chia sẻ trên sẽ giúp ích nhiều cho các bạn mới bắt đầu học Javascript và ES6. Trong phần tiếp theo của series, chúng ta trung tìm hiểu về class trong ES6
Tài liệu tham khảo: https://www.javascripttutorial.net/es6/
Xem tiếp phần tiếp theo của series tại đây.
hoặc tham khảo phần trước của series tại đây.