ECMAScript 2019

Số phiên bản JavaScript

Các phiên bản JS cũ được đặt tên bằng số: ES5 (2009) và ES6 (2015).

Từ năm 2016, các phiên bản được đặt tên theo năm: ECMAScript 2016, 2017, 2018, 2019,...

Tính năng mới trong ES2019:

Cảnh báo

Các tính năng này tương đối mới.

Các trình duyệt cũ có thể cần mã thay thế (Polyfill)

JavaScript 字符串方法 trimStart()

ES2019 đã thêm phương pháp String cho JavaScript trimStart()

trimStart() Cách hoạt động của phương pháp tương tự như trim() Giống như vậy, nhưng chỉ xóa khoảng trống ở đầu chuỗi.

实例

let text1 = "     Hello World!     ";
let text2 = text1.trimStart();

亲自试一试

Từ tháng 1 năm 2020, tất cả các trình duyệt hiện đại đều hỗ trợ JavaScript String trimStart():

Chrome Edge Firefox Safari Opera
Chrome 66 Edge 79 Firefox 61 Safari 12 Opera 50
Tháng 4 năm 2018 Tháng 1 năm 2020 Tháng 6 năm 2018 Tháng 9 năm 2018 Tháng 5 năm 2018

JavaScript 字符串方法 trimEnd()

ES2019 đã thêm vào JavaScript trimEnd() phương pháp chuỗi.

trimEnd() Cách hoạt động của phương pháp tương tự như trim() Giống như vậy, nhưng chỉ xóa khoảng trống ở cuối chuỗi.

实例

let text1 = "     Hello World!     ";
let text2 = text1.trimEnd();

亲自试一试

Từ tháng 1 năm 2020, tất cả các trình duyệt hiện đại đều hỗ trợ JavaScript String trimEnd():

Chrome Edge Firefox Safari Opera
Chrome 66 Edge 79 Firefox 61 Safari 12 Opera 50
Tháng 4 năm 2018 Tháng 1 năm 2020 Tháng 6 năm 2018 Tháng 9 năm 2018 Tháng 5 năm 2018

JavaScript 对象方法 fromEntries()

ES2019 đã thêm vào JavaScript fromEntries() Phương pháp đối tượng.

fromEntries() Phương pháp tạo ra đối tượng từ các cặp khóa/giá trị có thể lặp lại.

实例

const fruits = [
["apples", 300],
["pears", 900],
["bananas", 500]
];
const myObj = Object.fromEntries(fruits);

亲自试一试

Từ tháng 1 năm 2020, tất cả các trình duyệt hiện đại đều hỗ trợ JavaScript Object fromEntries():

Chrome Edge Firefox Safari Opera
Chrome 73 Edge 79 Firefox 63 Safari 12.1 Opera 60
Tháng 3 năm 2019 Tháng 1 năm 2020 Tháng 10 năm 2018 Tháng 3 năm 2019 Tháng 4 năm 2019

可选的 catch 绑定

Từ ES2019 trở đi, nếu không cần thiết, có thể bỏ qua tham số catch:

实例

Trước năm 2019:

try {
// mã
}
// mã
}

Sau năm 2019:

try {
// mã
}
// mã
}

Từ tháng 1 năm 2020, tất cả các trình duyệt hiện đại đều hỗ trợ optional catch binding:

Chrome Edge Firefox Safari Opera
Chrome 66 Edge 79 Firefox 58 Safari 11.1 Opera 53
Tháng 4 năm 2018 Tháng 1 năm 2020 Tháng 1 năm 2018 Tháng 3 năm 2018 Tháng 5 năm 2018

JavaScript 数组方法 flat()

ES2019 đã thêm vào JavaScript flat() Phương pháp mảng.

flat() Phương pháp tạo ra mảng mới bằng cách mở rộng mảng đệm.

实例

const myArr = [[1,2],[3,4],[5,6]];
const newArr = myArr.flat();

亲自试一试

Từ tháng 1 năm 2020, tất cả các trình duyệt hiện đại đều hỗ trợ JavaScript Array flat():

Chrome Edge Firefox Safari Opera
Chrome 69 Edge 79 Firefox 62 Safari 12 Opera 56
Tháng 9 năm 2018 Tháng 1 năm 2020 Tháng 9 năm 2018 Tháng 9 năm 2018 Tháng 9 năm 2018

JavaScript 数组方法 flatMap()

ES2019 đã thêm vào JavaScript flatMap() Phương pháp mảng.

flatMap() Phương pháp đầu tiên ánh xạ tất cả các phần tử của mảng, sau đó tạo ra mảng mới bằng cách mở rộng mảng.

实例

const myArr = [1, 2, 3, 4, 5, 6];
const newArr = myArr.flatMap((x) => x * 2);

亲自试一试

稳定的数组方法 sort()

ES2019 修订của phương thức sort() của Array.

Trước năm 2019, quy định cho phép sử dụng thuật toán sắp xếp không ổn định, ví dụ như QuickSort.

Sau ES2019, trình duyệt phải sử dụng thuật toán sắp xếp ổn định:

Khi sắp xếp các phần tử dựa trên một giá trị, các phần tử đó phải giữ nguyên vị trí tương đối với các phần tử có cùng giá trị.

实例

const myArr = [
  {name:"X00",price:100 },
  {name:"X01",price:100 },
  {name:"X02",price:100 },
  {name:"X03",price:100 },
  {name:"X04",price:110 },
  {name:"X05",price:110 },
  {name:"X06",price:110 },
  {name:"X07",price:110 }
];

亲自试一试

Trong ví dụ trên, khi sắp xếp theo giá, kết quả không được phép xuất hiện ở các vị trí tương đối khác như sau:

X01 100
X03 100
X00 100
X03 100
X05 110
X04 110
X06 110
X07 110

重新修订的 JSON.stringify()

ES2019 修订của phương thức stringify() của JSON.

Trước năm 2019, JSON không thể.stringify() ký tự được mã hóa bằng \.

实例

let text = JSON.stringify("\u26D4");

亲自试一试

Trước ES2019, việc sử dụng JSON.stringify() trên điểm mã UTF-8 (U+D800 đến U+DFFF) sẽ trả về các ký tự Unicode bị hỏng, ví dụ: ���。

Sau khi chỉnh sửa này, các chuỗi có điểm mã UTF-8 có thể được chuyển đổi an toàn bằng JSON.stringify() và khôi phục lại chuỗi ban đầu bằng JSON.parse()。

分隔符号

Hiện nay, trong văn bản chuỗi, cho phép sử dụng ký tự phân tách dòng và ký tự phân tách đoạn (\u2028\u2029)。

Trước năm 2019, chúng được coi là ký tự kết thúc dòng và gây ra lỗi ngoại lệ:

实例

// Điều này là hợp lệ trong ES2019:
let text = "\u2028";

亲自试一试

Lưu ý

Hiện nay, JavaScript và JSON có cùng quy tắc.

Trước ES2019:

text = JSON.parse('"\u2028"') sẽ phân tích thành ''。

text = '"\u2028"' sẽ trả vềLỗi ngữ pháp

重新修订的 Function toString()

ES2019 修订了 Function toString() 方法。

toString() 方法返回表示函数源代码的字符串。

从 2019 年开始,toString() 必须返回函数的源代码,包括注释、空格和语法细节。

在 2019 年之前,不同的浏览器返回了不同的函数变体(比如没有注释和空格)。从 2019 年开始,该函数应该完全按照编写的方式返回。

实例

function myFunction(p1, p2) {
  return p1 * p2;
}

亲自试一试