ECMAScript 6.0 (sau đây gọi là ES6) là tiêu chuẩn thế hệ tiếp theo của ngôn ngữ JavaScript, được chính thức phát hành vào tháng 6 năm 2015. Mục tiêu của nó là làm cho ngôn ngữ JavaScript có thể được sử dụng để viết các ứng dụng phức tạp quy mô lớn và trở thành một ngôn ngữ phát triển cấp doanh nghiệp.

1. Mối quan hệ giữa ECMAScript và JavaScript

Một câu hỏi phổ biến là, mối quan hệ giữa ECMAScript và JavaScript là gì?

Để làm rõ vấn đề này, chúng ta cần nhìn lại lịch sử. Vào tháng 11 năm 1996, Netscape, người tạo ra JavaScript, quyết định gửi JavaScript cho tổ chức tiêu chuẩn hóa ECMA, với hy vọng rằng ngôn ngữ này có thể trở thành một tiêu chuẩn quốc tế. Năm sau, ECMA đã ban hành ấn bản đầu tiên của tài liệu tiêu chuẩn số 262 (ECMA-262), trong đó quy định tiêu chuẩn cho ngôn ngữ kịch bản trình duyệt và được gọi là ngôn ngữ này là ECMAScript, và phiên bản này là phiên bản 1.0.

Tiêu chuẩn đã được xây dựng cho ngôn ngữ JavaScript ngay từ đầu, nhưng nó không được gọi là JavaScript vì hai lý do. Một là nhãn hiệu, Java là nhãn hiệu của Sun. Theo thỏa thuận cấp phép, chỉ Netscape mới có thể sử dụng hợp pháp tên JavaScript và bản thân JavaScript cũng đã được Netscape đăng ký làm nhãn hiệu. Thứ hai là phản ánh rằng người tạo ra ngôn ngữ này là ECMA, không phải Netscape, giúp đảm bảo tính cởi mở và trung lập của ngôn ngữ này.

Do đó, mối quan hệ giữa ECMAScript và JavaScript là cái trước là đặc tả của cái sau và cái sau là sự triển khai của cái trước (các phương ngữ khác của ECMAScript bao gồm JScript và ActionScript). Trong các tình huống hàng ngày, hai từ này có thể thay thế cho nhau.

2. Mối quan hệ giữa ES6 và ECMAScript 2015

Thuật ngữ ECMAScript 2015 (viết tắt là ES2015) cũng thường được nhìn thấy. Nó liên quan như thế nào đến ES6?

Năm 2011, sau khi phát hành ECMAScript phiên bản 5.1, phiên bản 6.0 bắt đầu. Do đó, ý nghĩa ban đầu của từ ES6 đề cập đến phiên bản tiếp theo của ngôn ngữ JavaScript.

Tuy nhiên, do phiên bản này giới thiệu quá nhiều chức năng ngữ pháp, và trong quá trình phát triển, nhiều tổ chức và cá nhân vẫn tiếp tục trình các chức năng mới. Rõ ràng là không thể bao gồm tất cả các tính năng sẽ được giới thiệu trong một phiên bản. Thực tế thông thường là phát hành phiên bản 6.0 trước, sau đó phát hành phiên bản 6.1 sau một khoảng thời gian, sau đó là phiên bản 6.2, phiên bản 6.3, v.v.

Tuy nhiên, các nhà sản xuất tiêu chuẩn không muốn làm điều này. Họ muốn nâng cấp tiêu chuẩn theo quy trình thường xuyên: bất kỳ ai cũng có thể gửi đề xuất về ngữ pháp mới cho Ủy ban tiêu chuẩn bất kỳ lúc nào và sau đó Ủy ban tiêu chuẩn họp mỗi tháng một lần để đánh giá xem những đề xuất này có được chấp nhận hay không và những cải tiến nào là cần thiết. Nếu sau nhiều cuộc họp, một đề xuất đã đủ chín muồi, nó có thể chính thức đi vào tiêu chuẩn. Điều này có nghĩa là việc nâng cấp phiên bản tiêu chuẩn đã trở thành một quá trình liên tục và sẽ thay đổi hàng tháng.

Ủy ban Tiêu chuẩn cuối cùng đã quyết định rằng tiêu chuẩn sẽ chính thức được phát hành vào tháng 6 hàng năm như là phiên bản chính thức của năm đó. Trong thời gian sau, các thay đổi sẽ được thực hiện trên cơ sở phiên bản này, và đến tháng 6 năm sau, dự thảo sẽ đương nhiên trở thành phiên bản của năm mới. Theo cách này, số phiên bản trước không cần thiết, miễn là nó được đánh dấu bằng năm.

Phiên bản đầu tiên của ES6 được phát hành vào tháng 6 năm 2015, và tên chính thức là "ECMAScript 2015 Standard" (gọi tắt là ES2015). Vào tháng 6 năm 2016, "Tiêu chuẩn ECMAScript 2016" (viết tắt là ES2016) được sửa đổi một chút đã được phát hành theo lịch trình. Phiên bản này có thể được coi là phiên bản ES6.1, bởi vì sự khác biệt giữa hai là rất nhỏ (chỉ là includes phương thức của mảng instance và phép tính chỉ số được thêm vào Symbol), về cơ bản là cùng một tiêu chuẩn. Theo kế hoạch, tiêu chuẩn ES2017 sẽ được phát hành vào tháng 6/2017.

Do đó, ES6 vừa là một thuật ngữ lịch sử vừa là một tham chiếu chung, nghĩa là tiêu chuẩn thế hệ tiếp theo của JavaScript sau phiên bản 5.1, bao gồm ES2015, ES2016, ES2017, v.v., trong khi ES2015 là tên chính thức, cụ thể là đề cập đến phiên bản chính thức phát hành năm đó Tiêu chuẩn ngôn ngữ. Trường hợp ES6 được đề cập trong cuốn sách này, nó thường đề cập đến tiêu chuẩn ES2015, nhưng đôi khi nó cũng đề cập đến "ngôn ngữ JavaScript thế hệ tiếp theo".

3. Quy trình phê duyệt đề xuất ngữ pháp

Bất kỳ ai cũng có thể gửi đề xuất đến Ủy ban Tiêu chuẩn (còn được gọi là Ủy ban TC39) để yêu cầu thay đổi các tiêu chuẩn ngôn ngữ.

Một ngữ pháp mới cần trải qua năm giai đoạn từ một đề xuất đến trở thành một tiêu chuẩn chính thức. Các thay đổi ở mỗi giai đoạn cần được sự chấp thuận của ủy ban TC39.

  • Giai đoạn 0 - Strawman
  • Giai đoạn 1 - Đề xuất
  • Giai đoạn 2 - Bản nháp
  • Giai đoạn 3 - Ứng viên
  • Giai đoạn 4 - Kết thúc

Miễn là một đề xuất có thể bước vào Giai đoạn 2, nó gần như chắc chắn sẽ được đưa vào các tiêu chuẩn chính thức trong tương lai. Tất cả các đề xuất ECMAScript hiện tại có thể được xem trên trang web chính thức của TC39 GitHub.com/tc39/ecma262.

Một trong những mục tiêu viết của cuốn sách này là theo dõi sự phát triển mới nhất của ngôn ngữ ECMAScript và giới thiệu tất cả các ngữ pháp mới sau phiên bản 5.1. Đối với những câu đã rõ ràng hoặc có triển vọng, những ngữ pháp mới sẽ được đưa vào tiêu chuẩn sẽ được giới thiệu.

4. Lịch sử của ECMAScript

Mất 15 năm để ES6 được phát triển từ đầu cho đến bản phát hành cuối cùng.

Như đã đề cập trước đó, ECMAScript 1.0 được phát hành vào năm 1997, và trong hai năm tiếp theo, ECMAScript 2.0 (tháng 6 năm 1998) và ECMAScript 3.0 (tháng 12 năm 1999) lần lượt được phát hành. Phiên bản 3.0 là một thành công lớn, đã được hỗ trợ rộng rãi trong ngành và trở thành một tiêu chuẩn chung, đặt ra cú pháp cơ bản của ngôn ngữ JavaScript và các phiên bản tiếp theo sẽ được kế thừa hoàn toàn. Cho đến ngày nay, khi người mới bắt đầu học JavaScript, họ thực sự đang học ngữ pháp của phiên bản 3.0.

Năm 2000, ECMAScript 4.0 bắt đầu được sản xuất. Phiên bản này cuối cùng không thành công, nhưng hầu hết nội dung của nó đã được ES6 kế thừa. Do đó, điểm khởi đầu cho ES6 thực sự là 2000.

Tại sao ES4 không vượt qua? Bởi vì phiên bản này quá cấp tiến, ES3 đã được nâng cấp hoàn toàn, điều này khiến một số thành viên của ủy ban tiêu chuẩn không muốn chấp nhận nó. Ủy ban Kỹ thuật 39 (TC39) của ECMA chịu trách nhiệm xây dựng các tiêu chuẩn ECMAScript và các thành viên của nó bao gồm các công ty lớn như Microsoft, Mozilla và Google.

Vào tháng 10 năm 2007, phiên bản dự thảo của ECMAScript 4.0 được phát hành và phiên bản chính thức dự kiến ​​sẽ được phát hành vào tháng 8 năm sau. Tuy nhiên, có những bất đồng nghiêm trọng về việc có nên thông qua tiêu chuẩn này hay không. Các công ty lớn, đứng đầu là Yahoo, Microsoft và Google, phản đối việc nâng cấp đáng kể JavaScript và ủng hộ những thay đổi nhỏ; Mozilla, do người sáng tạo JavaScript Brendan Eich đứng đầu, nhấn mạnh về bản dự thảo hiện tại.

Vào tháng 7 năm 2008, do các bên có quá nhiều bất đồng và tranh luận quá nhiều về những chức năng nào nên được đưa vào phiên bản tiếp theo, ECMA đã quyết định tạm dừng phát triển ECMAScript 4.0 và phát hành một phần nhỏ liên quan đến cải tiến các chức năng hiện có như ECMAScript 3.1, và mở rộng phạm vi của các ý tưởng cấp tiến khác và đưa chúng vào các phiên bản sau. Do không khí của cuộc họp, mã dự án của phiên bản này được đặt tên là Harmony. Ngay sau cuộc họp, ECMAScript 3.1 được đổi tên thành ECMAScript 5.

Tháng 12 năm 2009, ECMAScript phiên bản 5.0 chính thức được phát hành. Dự án Harmony được chia làm hai. Một số ý tưởng khả thi hơn được đặt tên là JavaScript.next và tiếp tục được phát triển, sau đó phát triển thành ECMAScript 6; một số ý tưởng ít trưởng thành hơn được coi là JavaScript.next.next, trong tương lai xa hơn. Hãy cân nhắc tung ra một lần nữa. Sự xem xét tổng thể của ủy ban TC39 là ES5 về cơ bản tương thích với ES3 và các sửa lỗi ngữ pháp chính và các tính năng mới được thêm vào, sẽ được hoàn thiện bởi JavaScript.next. Vào thời điểm đó, JavaScript.next đề cập đến ES6 và sau khi phiên bản thứ sáu được phát hành, nó đề cập đến ES7. Nhận định của TC39 là ES5 sẽ trở thành tiêu chuẩn chủ đạo cho sự phát triển JavaScript vào giữa năm 2013 và sẽ duy trì vị trí này trong 5 năm tới.

Vào tháng 6 năm 2011, ECMAScript phiên bản 5.1 được phát hành và trở thành tiêu chuẩn quốc tế ISO (ISO / IEC 16262: 2011).

Vào tháng 3 năm 2013, bản nháp ECMAScript 6 bị đóng băng và không có tính năng mới nào được thêm vào. Các tính năng mới sẽ được đưa vào ECMAScript 7.

Vào tháng 12 năm 2013, bản thảo ECMAScript 6 đã được phát hành. Sau đó là khoảng thời gian thảo luận kéo dài 12 tháng để lắng nghe phản hồi từ tất cả các bên.

Tháng 6 năm 2015, ECMAScript 6 chính thức được thông qua và trở thành tiêu chuẩn quốc tế. Tính từ năm 2000, đã 15 năm trôi qua.

Hiện tại, bạn có thể xem hỗ trợ của các trình duyệt chính cho ES6 tại kangax.github.io/compat-table/es6/

Node.js là môi trường thời gian chạy máy chủ (runtime) của JavaScript. Nó có hỗ trợ cao hơn cho ES6. Ngoài các chức năng được bật theo mặc định, có một số chức năng cú pháp đã được thực hiện, nhưng chúng không được bật theo mặc định. Sử dụng lệnh sau để xem cú pháp thử nghiệm ES6 không được bật theo mặc định trong Node.js.

// Linux & Mac
$ node --v8-options | grep harmony

// Windows
$ node --v8-options | findstr harmony

5. Bộ chuyển mã Babel

Babel là một bộ chuyển mã ES6 được sử dụng rộng rãi, có thể chuyển mã ES6 thành mã ES5, có thể được thực thi trong các trình duyệt cũ hơn. Điều này có nghĩa là bạn có thể viết các chương trình trong ES6 mà không cần lo lắng về việc liệu môi trường hiện tại có hỗ trợ nó hay không. Dưới đây là một ví dụ.

//  Trước khi convert
input.map(item => item + 1);

// Sau khi convert
input.map(function (item) {
  return item + 1;
});

Đoạn mã gốc ở trên sử dụng các hàm mũi tên. Babel chuyển nó thành một hàm bình thường và có thể được thực thi trong môi trường JavaScript không hỗ trợ các hàm mũi tên.

Lệnh sau cài đặt Babel trong thư mục dự án.

$ npm install --save-dev @babel/core

Theo: Dự án Internet

Comments

  • Learn ECMAscript

    23 days ago

    ECMAScript 6.0 (sau đây gọi là ES6) là tiêu chuẩn thế hệ tiếp theo của ngôn ngữ JavaScript, được chính thức phát hành vào tháng 6 năm 2015. Mục tiêu của nó là làm cho ngôn ngữ JavaScript có thể được sử dụng để viết các ứng dụng phức tạp quy mô lớn và trở thành một ngôn ngữ phát triển cấp doanh nghiệp.

User's Profile