Các tính năng ES2018 (ES9)

Tram Ho

1. Rest/Spread Properties

ES2015 đã mang đến khái niệm về phần tử rest khi thực hiện destructuring mảng:

phần tử spread:

ES2018 cũng mang đến thứ tương tự cho object.

Thuộc tính rest:

2. Lặp không đồng bộ

Cấu trúc mới for-await-of cho phép bạn lặp một đối tượng không đồng bộ:

Vì sử dụng await nên bạn chỉ có thể dùng nó trong hàm async.

3. Promise.prototype.finally()

Khi một promise được hoàn thành, nếu thành công nó sẽ gọi các phương thức then(). Nếu thất bại thì method then() sẽ bị bỏ qua và method catch() sẽ được thực thi.

Method finally() sẽ cho phép bạn chạy một đoạn code nào đó bất kể việc promise được thực hiện thành công hay không:

4. Cải tiến Regular Expression

ES2018 có thêm một số cải tiến liên quan đến Regular Expression.

lookbehind: match string dựa theo string đi trước nó

Trước đây chúng ta đã có lookahead: dùng ?= để match một string mà nó được nối tiếp bởi một string do bạn chỉ định:

Còn ?! là dạng phủ định của lookahead, dùng để match một chỗi mà nó không được nối tiếp bởi một string do bạn chỉ định:

Từ ES2018 chúng ta có thêm tính năng lookbehind (?<=).

Dùng lookbehind ở dạng phủ định bằng ?<!:

escape thuộc tính Unicode bằng p{...}P{...}

Trong một regular expression, bạn có thể dùng d để match bất kì chữ số nào, dùng s để match bất kì kí tự nào không phải là khoảng trắng, w để match bất kì ký tự chữ và số nào, v.v…

Tín năng mới này mở rộng khái niệm trên sang tới các kí tự Unicode bằng p{} và thể phủ định P{}.

Bất kì kí tự unicode nào cũng đều có các thuộc tính. Ví dụ, thuộc tính Script thể hiện language family của kí tự, ASCII là một thuộc tính có giá trị kiểu boolean thể hiện kí tự có phải là kí tự ASCII hay không v.v… Bạn có thể đặt thuộc tính ASCII vào trong ngoặc nhọn và regex sẽ check xem có có đúng hay không:

ASCII_Hex_Digit là một thuộc tính boolean khác dùng để check xem một string có chứa chữ số thập lục phân hay không:

Còn rất nhiều thuộc tính boolean khác mà bạn có thể dùng để check bằng cách thêm tên chúng vào trong ngoặc nhọn ví dụ như Uppercase, Lowercase, White_Space, Alphabetic, Emoji v.v…:

Bên cạnh các thuộc tính boolean, bạn có thể check bất kì một thuôc tính nào khác của các kì tự unicode xem nó có bằng với một giá trị nhất định nào đó hay không. Trong ví dụ sau, mình đã check xem string được viết bằng chữ Hy Lạp hay chữ Latinh:

Bạn có thể tham khảo danh sách các thuộc tính của Unicode characters tại đây.

Đặt tên cho nhóm

Trong ES2018, nhóm RegEx có thể được gán tên thay vì chỉ được gán bằng số trong mảng trả về như trước đây:

s flag

s flag, viết tắt của single line, khiến cho . có thể match được cả kí tự newline (. match tất cả các kí tự trừ kì tự newline):


Các bạn có thể đọc tiếp về ES2019 ở bài viết tiếp theo.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo