- vừa được xem lúc

Các điều thú vị sắp tới của JavaScript ES2021 (ES12)

0 1 16

Người đăng: Nguyễn Quang Linh

Theo Viblo Asia

Xin chào quý vị rất thân ái!

Chào mừng quý vị đến với bài viết tiếp theo của em sau chuỗi em đang chìm đắm trong dự án và chủ đề của lần gặp gỡ này sẽ là "Các điều thú vị sắp tới của JavaScript ES2021 (ES12)".

ES2021 (ES12) sẽ ra mắt trong giữa năm 2021. Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu 4 features thú vị gồm: String.prototype.replaceAll(), numeric separators, logical assignment operators, Promise.any().

Chúng ta cùng xem cách mà chúng hoạt động thôi!

String.prototype.replaceAll()

Phương thức này hoạt động cũng giống như replace chúng ta thường dùng. Sự khác biệt là replaceAll() sẽ replace tất cả các lần xuất hiện của đối tượng trong string mà không cần dùng đến vòng lặp.

replaceAll() cũng có thể nhận vào một regex.

// Declare a string:
let str = 'There are those who like cats, there those who like watching cats and there are those who have cats.' // Replace all occurrences of "cats" with dogs:
str = str.replaceAll('cats', 'dogs') // Log the new value of "str":
console.log(str)
// Output:
// 'There are those who like dogs, there those who like watching dogs and there are those who have dogs.' // A simple alternative with replace():
str = str.replace(/cats/g, 'dogs') // Log the new value of "str":
console.log(str)
// Output:
// 'There are those who like dogs, there those who like watching dogs and there are those have dogs.'

Numeric separators

Một tính năng nhỏ tiếp theo đó nữa là Numeric separators. Khi chúng ta là việc với các dãy số dài, chúng ta khó xác định được giá trị của dãy số và số hạng của từng số. Numeric separators giúp chúng ta dễ nhìn hơn. Cú pháp là dấu gạch dưới đơn giản (_)

// Number without numeric separators:
const num = 3685134689 // Number with numeric separators:
const num = 3_685_134_689

Chú ý: Numeric separators chỉ giúp chúng ta dễ nhìn, chứ không làm ảnh hưởng tới giá trị của biến.

// Use numeric separators with a number:
const num = 3_685_134_689 // Log the value of "num":
console.log(num)
// Output:
// 3685134689

Logical assignment operators

ES2021 sẽ cho phép chúng ta kết hợp các toán tử logic như (&& || ...) với biểu thức gán bằng (=).

Trước đây chúng ta đã sử dụng kết hợp các phép toán tử với phép gán bằng. Ví dụ: phép cộng (+ =), phép trừ (- =), phép nhân (* =), v.v. Nhờ ES2021, chúng ta có thể sử dụng các toán tử logic (&&, || và ?? ) với phép gán bằng (=)

//
// AND AND equals (&&=)
x &&= y // Is equivalent to:
x = x && d // Or:
if (x) { x = y
} // Example 1:
let x = 3 // Truthy value.
let y = 0 // Falsy value.
x &&= y // Log the value of "x":
console.log(x)
// Output:
// 0 // Example 2:
let x = 0 // Falsy value.
let y = 9 // Truthy value.
x &&= y // Log the value of "x":
console.log(x)
// Output:
// 0 // Example 3:
let x = 3 // Truthy value.
let y = 15 // Truthy value.
x &&= y // Log the value of "x":
console.log(x)
// Output:
// 15 //
// OR OR equals (||=):
x ||= y // Is equivalent to:
x = x || y // Or:
if (!x) { x = y
} // Example 1:
let x = 3 // Truthy value.
let y = 0 // Falsy value.
x ||= y // Log the value of "x":
console.log(x)
// Output:
// 3 // Example 2:
let x = 0 // Falsy value.
let y = 9 // Truthy value.
x ||= y // Log the value of "x":
console.log(x)
// Output:
// 9 // Example 3:
let x = 3 // Truthy value.
let y = 15 // Truthy value.
x ||= y // Log the value of "x":
console.log(x)
// Output:
// 3 //
// Nullish coalescing (??):
x ??= y // Is equivalent to:
x = x ?? y // Or:
if (x == null || x == undefined) { x = y
} // Example 1:
let x = null // Null value.
let y = 'Hello' // Non-null value.
x ??= y // Log the value of "x":
console.log(x)
// Output:
// 'Hello' // Example 2:
let x = 'Jay' // Non-null value.
let y = 'Hello' // Non-null value.
x ??= y // Log the value of "x":
console.log(x)
// Output:
// 'Jay' // Example 3:
let x = 'Jay' // Non-null value.
let y = null // Null value.
x ??= y // Log the value of "x":
console.log(x)
// Output:
// 'Jay' // Example 4:
let x = undefined // Non-null value.
let y = 'Jock' // Null value.
x ??= y // Log the value of "x":
console.log(x)
// Output:
// 'Jock'

Hãy cùng xem một số ví dụ trên. Đầu tiên, x && = y. Điều này sẽ gán y cho x nếu x là truthy. Nếu không, nó sẽ gán y. Thứ hai, x || = y. Điều này sẽ chỉ gán y cho x khi x là một giá trị falsy. Nếu x là truthy và y là falsy, việc gán sẽ không xảy ra.

Promise.any()

ES6 đã giới thiệu các phương thức Promise.race()Promise.all(). Sau đó, ES2020 mang đến Promise.allSettled(). ES2021 mang đến một phương thức khác có thể làm cho việc làm việc với các Promise trở nên dễ dàng hơn, phương thức Promise.any().

Phương thức Promise.any() nhận nhiều Promise và trả về một Promise nếu bất kỳ Promise nào được thực hiện. Promise đầu tiên được thực hiện là promise được trả về bởi Promise.any(). Nếu tất cả các Promise bạn cung cấp đều reject, Promise.any() sẽ trả về AggregateError và message errors.

// Example 1: All resolve:
// Create promises:
const promise1 = new Promise((resolve, reject) => { setTimeout(() => { resolve('promise1 is resolved.') }, Math.floor(Math.random() * 1000))
}) const promise2 = new Promise((resolve, reject) => { setTimeout(() => { resolve('promise2 is resolved.') }, Math.floor(Math.random() * 1000))
}) const promise3 = new Promise((resolve, reject) => { setTimeout(() => { resolve('promise3 is resolved.') }, Math.floor(Math.random() * 1000))
}) ;(async function() { // Await the result of Promise.any(): const result = await Promise.any([promise1, promise2, promise3]) // Log the value returned by Promise.any(): console.log(result) // Output: // 'promise1 is resolved.', 'promise2 is resolved.' or 'promise3 is resolved.'
})() // Example 2: Some resolve:
// Create promises:
const promise1 = new Promise((resolve, reject) => { setTimeout(() => { resolve('promise1 is resolved.') }, Math.floor(Math.random() * 1000))
}) const promise2 = new Promise((resolve, reject) => { setTimeout(() => { reject('promise2 was rejected.') }, Math.floor(Math.random() * 1000))
}) ;(async function() { // Await the result of Promise.any(): const result = await Promise.any([promise1, promise2]) // Log the value returned by Promise.any(): console.log(result) // Output: // 'promise1 is resolved.'
})() // Example 3: None resolves:
// Create promises:
const promise1 = new Promise((resolve, reject) => { setTimeout(() => { reject('promise1 was rejected.') }, Math.floor(Math.random() * 1000))
}) const promise2 = new Promise((resolve, reject) => { setTimeout(() => { reject('promise2 was rejected.') }, Math.floor(Math.random() * 1000))
}) ;(async function() { // Use try...catch to catch the AggregateError: try { // Await the result of Promise.any(): const result = await Promise.any([promise1, promise2]) } catch (err) { console.log(err.errors) // Output: // [ 'promise1 was rejected.', 'promise2 was rejected.' ] }
})()

Conclusion

ES2021 (ES12) có vẻ thay đổi nhỏ hơn so với các version trước đây của JavaScript, chẳng hạn như ES6 và ES2020. Tuy nhiên, có một số tính năng thú vị đáng được quan tâm.

Đêm cũng đã khuya, thôi thì xin hẹn quý vị ở các dịp hội ngộ lần sau. Xin hẹn gặp lại!

Tham khảo: https://alimammiya.hashnode.dev/upcoming-interesting-javascript-es2021-es12-features-to-look-for-1

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 528

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 437

- vừa được xem lúc

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 159

- vừa được xem lúc

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 149

- vừa được xem lúc

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 113

- vừa được xem lúc

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 249