của Micheal Aranda
Tôi đã thử tìm trên Google “sự khác biệt giữa JavaScript và ECMAScript.”
Cuối cùng, tôi phải lội qua một biển kết quả mơ hồ và có vẻ mâu thuẫn:
“ECMAScript là một tiêu chuẩn.”
“JavaScript là một tiêu chuẩn.”
“ECMAScript là một đặc điểm kỹ thuật.”
“JavaScript là một triển khai của tiêu chuẩn ECMAScript.”
“ECMAScript là JavaScript được tiêu chuẩn hóa.”
“ECMAScript là một ngôn ngữ.”
“JavaScript là một phương ngữ của ECMAScript.”
“ECMAScript Là JavaScript.”

Cố kìm lại cảm giác muốn khóc, tôi đứng dậy và quyết định cam kết thực hiện một số nghiên cứu đau đớn nhưng hiệu quả.
Bài viết này trình bày hiểu biết hiện tại của tôi về sự khác biệt giữa JavaScript và ECMAScript. Nó hướng đến những người đã quen thuộc với JavaScript nhưng muốn hiểu rõ hơn về mối quan hệ của nó với ECMAScript, trình duyệt web, Babel, v.v. Bạn cũng sẽ tìm hiểu về ngôn ngữ kịch bản lệnh, công cụ JavaScript và thời gian chạy JavaScript để đo lường hiệu quả.
Vì vậy, có được bơm.
Bảng thuật ngữ JavaScript/ECMAScript
Dưới đây là danh sách các định nghĩa, được thiết kế tập trung vào tính nhất quán và rõ ràng. Các định nghĩa không hoàn thành 100%. Chúng được xây dựng theo cách cung cấp hiểu biết cấp cao về kết nối và mối quan hệ giữa JavaScript và ECMAScript.
Không chần chừ nữa, chúng ta hãy bắt đầu.
Ecma quốc tế
Một tổ chức tạo ra các tiêu chuẩn cho công nghệ.

Để minh họa một ví dụ về “tiêu chuẩn” (mặc dù không phải do Ecma tạo ra), hãy nghĩ về tất cả các bàn phím bạn đã từng sử dụng. Đại đa số có các chữ cái theo cùng một thứ tự và một phím cách, phím Enter, các phím mũi tên, với các số được hiển thị trong một hàng ở trên cùng không? Điều này là do hầu hết các nhà sản xuất bàn phím thiết kế bàn phím của họ dựa trên tiêu chuẩn bố cục QWERTY.
ECMA-262
Đây là tiêu chuẩn do Ecma International công bố. Nó chứa thông số kỹ thuật cho một ngôn ngữ kịch bản mục đích chung.

ECMA-262 là một tiêu chuẩn giống như QWERTY, nhưng thay vì đại diện cho đặc tả bố cục bàn phím, nó đại diện cho đặc tả ngôn ngữ kịch bản có tên là ECMAScript.
Hãy coi ECMA-262 là số tham chiếu của ECMAScript.

Một ngôn ngữ kịch bản
Một ngôn ngữ lập trình được thiết kế đặc biệt để hoạt động trên một thực thể hoặc hệ thống hiện có
Để biết ý tưởng chung về điều gì làm cho ngôn ngữ lập trình trở thành ngôn ngữ kịch bản, hãy xem xét các lệnh “đi bộ”, “chạy” và “nhảy”. Những hành động này cần một thứ gì đó để thực hiện chúng, có thể là một người, một con chó hoặc một nhân vật trong trò chơi điện tử. Nếu không có diễn viên thực hiện các mệnh lệnh này thì “đi bộ”, “chạy” và “nhảy” sẽ không có ý nghĩa gì. Tập hợp các hành động này tương tự như một ngôn ngữ kịch bản tập trung vào thao tác với một thực thể bên ngoài.
ECMAScript
Thông số kỹ thuật được xác định trong ECMA-262 để tạo ngôn ngữ kịch bản cho mục đích chung.
từ đồng nghĩa: Đặc tả ECMAScript

Mặc dù ECMA-262 là tên của tiêu chuẩn, nhưng nó đại diện cho đặc tả ngôn ngữ kịch bản ECMAScript.
ECMAScript cung cấp các quy tắc, chi tiết và hướng dẫn mà ngôn ngữ kịch bản lệnh phải tuân thủ để được coi là tuân thủ ECMAScript.

JavaScript
Ngôn ngữ kịch bản mục đích chung phù hợp với đặc tả ECMAScript.

JavaScript là ngôn ngữ có hương vị cà phê mà tôi thích lập trình. ECMAScript là đặc điểm kỹ thuật mà nó dựa trên. Bằng cách đọc đặc tả ECMAScript, bạn học cách tạo ra một ngôn ngữ kịch bản. Bằng cách đọc tài liệu JavaScript, bạn học cách sử dụng một ngôn ngữ kịch bản.
Khi mọi người gọi JavaScript là “phương ngữ của ngôn ngữ ECMAScript”, nghĩa của nó giống như khi nói về phương ngữ tiếng Anh, tiếng Pháp hoặc tiếng Trung. Một phương ngữ bắt nguồn phần lớn từ vựng và cú pháp của nó từ ngôn ngữ mẹ đẻ của nó, nhưng đủ sai lệch để xứng đáng được phân biệt.
JavaScript chủ yếu triển khai đặc tả ECMAScript như được mô tả trong ECMA-262, nhưng vẫn tồn tại một số điểm khác biệt. Mozilla phác thảo các tính năng ngôn ngữ không phải ECMAScript của JavaScript tại đây:

Một công cụ JavaScript
Một chương trình hoặc trình thông dịch hiểu và thực thi mã JavaScript.
từ đồng nghĩa: Trình thông dịch JavaScript, triển khai JavaScript

Công cụ JavaScript thường được tìm thấy trong các trình duyệt web, bao gồm V8 trong Chrome, SpiderMonkey trong Firefox và Chakra trong Edge. Mỗi công cụ giống như một mô-đun ngôn ngữ cho ứng dụng của nó, cho phép nó hỗ trợ một tập con nhất định của ngôn ngữ JavaScript.
Công cụ JavaScript đối với trình duyệt giống như khả năng hiểu ngôn ngữ đối với một người. Nếu chúng ta xem lại ví dụ về các hành động “đi bộ”, “chạy”, “nhảy”, thì công cụ JavaScript là một phần của “thực thể” thực sự hiểu ý nghĩa của những hành động này.
Sự tương tự này giúp giải thích một số điều về trình duyệt:

Sự khác biệt về hiệu suất trình duyệt
Hai người có thể nhận ra lệnh “nhảy”, nhưng một người có thể phản ứng với lệnh nhanh hơn vì người này có thể hiểu và xử lý lệnh nhanh hơn người kia. Tương tự, hai trình duyệt có thể hiểu mã JavaScript, nhưng một trình duyệt chạy nhanh hơn vì công cụ JavaScript của nó được triển khai hiệu quả hơn.

Sự khác biệt trong hỗ trợ trình duyệt
Hãy xem xét sự khác biệt tồn tại giữa những người nói cùng một ngôn ngữ. Ngay cả khi nhiều người nói tiếng Anh, một số người có thể biết một số từ, cách diễn đạt và quy tắc cú pháp mà những người khác thì không và ngược lại. Các trình duyệt cũng giống như vậy. Mặc dù tất cả các công cụ JavaScript của trình duyệt đều hiểu JavaScript, nhưng một số trình duyệt hiểu ngôn ngữ này tốt hơn các trình duyệt khác. Có sự khác biệt trong cách trình duyệt hỗ trợ ngôn ngữ.
Liên quan đến hỗ trợ trình duyệt, mọi người thường nói về “khả năng tương thích ECMAScript” hơn là “khả năng tương thích JavaScript”, mặc dù các công cụ JavaScript phân tích cú pháp và thực thi… tốt, JavaScript. Điều này có thể hơi khó hiểu, nhưng có một lời giải thích.

Nếu bạn còn nhớ, ECMAScript là một đặc điểm kỹ thuật cho ngôn ngữ kịch bản có thể trông giống như. Việc phát hành phiên bản ECMAScript mới không có nghĩa là tất cả các công cụ JavaScript đang tồn tại đột nhiên có các tính năng mới đó. Các nhóm hoặc tổ chức chịu trách nhiệm về công cụ JavaScript phải cập nhật thông số kỹ thuật ECMAScript mới nhất và áp dụng các thay đổi của nó tùy thuộc vào các nhóm hoặc tổ chức.
Do đó, các nhà phát triển có xu hướng đặt câu hỏi như, “Trình duyệt này hỗ trợ phiên bản ECMAScript nào?” hoặc “Trình duyệt này hỗ trợ những tính năng ECMAScript nào?” Họ muốn biết liệu Google, Mozilla và Microsoft có bắt đầu cập nhật công cụ JavaScript của trình duyệt của họ hay không — ví dụ như V8, SpiderMonkey và Chakra tương ứng — với các tính năng được mô tả trong ECMAScript mới nhất.
Bảng tương thích ECMAScript là một nguồn tốt để trả lời những câu hỏi đó.
Nếu một phiên bản mới của ECMAScript ra mắt, các công cụ JavaScript sẽ không tích hợp toàn bộ bản cập nhật cùng một lúc. Chúng kết hợp dần dần các tính năng ECMAScript mới, như đã thấy trong đoạn trích này từ nhật ký thay đổi JavaScript của Firefox:

Thời gian chạy JavaScript
Môi trường trong đó mã JavaScript chạy và được diễn giải bởi một công cụ JavaScript. Thời gian chạy cung cấp các đối tượng máy chủ mà JavaScript có thể hoạt động và làm việc cùng.
từ đồng nghĩa: Môi trường máy chủ

Thời gian chạy JavaScript là “thực thể hoặc hệ thống hiện có” được đề cập trong định nghĩa ngôn ngữ tập lệnh. Mã đi qua công cụ JavaScript và sau khi được phân tích cú pháp và hiểu, một thực thể hoặc hệ thống sẽ thực hiện các hành động được diễn giải. Con chó đi bộ, một người chạy, một nhân vật trong trò chơi điện tử nhảy lên (hoặc trong trường hợp của hình trên là bị đắm).
Các ứng dụng tự cung cấp cho tập lệnh JavaScript bằng cách cung cấp “đối tượng máy chủ” khi chạy. Đối với phía máy khách, thời gian chạy JavaScript sẽ là trình duyệt web, nơi các đối tượng lưu trữ như cửa sổ và tài liệu HTML được cung cấp để thao tác.
Bạn đã bao giờ làm việc với các đối tượng lưu trữ cửa sổ hoặc tài liệu chưa? Các đối tượng cửa sổ và tài liệu không thực sự là một phần của ngôn ngữ JavaScript cốt lõi. Chúng là các API Web, các đối tượng được cung cấp bởi một trình duyệt đóng vai trò là môi trường máy chủ của JavaScript. Đối với phía máy chủ, thời gian chạy JavaScript là Node.js. Các đối tượng máy chủ liên quan đến máy chủ như hệ thống tệp, quy trình và yêu cầu được cung cấp trong Node.js.
Một điểm thú vị: các thời gian chạy JavaScript khác nhau có thể chia sẻ cùng một công cụ JavaScript. Ví dụ: V8 là công cụ JavaScript được sử dụng trong cả Google Chrome và Node.js — hai môi trường rất khác nhau.
ECMAScript 6
Đây là phiên bản thứ sáu của tiêu chuẩn ECMA-262 và có các thay đổi và cải tiến lớn đối với đặc tả ECMAScript.
từ đồng nghĩa: ES6, ES2015 và ECMAScript 2015

Phiên bản ECMAScript này đã đổi tên từ ES6 thành ES2015 vì vào năm 2015 Ecma International đã quyết định chuyển sang các bản phát hành ECMAScript hàng năm. Theo đó, Ecma International cũng bắt đầu đặt tên cho các phiên bản mới của đặc tả ECMAScript dựa trên năm chúng được phát hành. Tóm lại, ES6 và ES2015 là hai tên gọi khác nhau cho cùng một thứ.
Ba-bên
Một bộ chuyển mã có thể chuyển đổi mã ES6 thành mã ES5.

Các nhà phát triển có thể sử dụng các tính năng mới hấp dẫn đi kèm với ES6, nhưng có thể lo ngại về khả năng tương thích giữa các trình duyệt cho các ứng dụng web của họ. Tại thời điểm viết bài này, Edge và Internet Explorer không hỗ trợ đầy đủ các tính năng từ đặc tả ES6.
Các nhà phát triển quan tâm có thể sử dụng Babel để chuyển đổi mã ES6 của họ thành phiên bản tương đương về mặt chức năng chỉ sử dụng các tính năng của ES5. Tất cả các trình duyệt chính đều hỗ trợ đầy đủ ES5, vì vậy chúng có thể chạy mã mà không gặp bất kỳ sự cố nào.
Thêm một mẩu tin thú vị nữa
Tôi hy vọng bạn thấy thông tin về JavaScript và ECMAScript này hữu ích. Trước khi chúng ta kết thúc mọi thứ ở đây, tôi muốn chia sẻ thêm một thông tin cần được làm rõ cho các nhà phát triển web non trẻ như tôi.
Con gà hay quả trứng
Một chút khó hiểu về lịch sử là JavaScript được tạo ra vào năm 1996. Sau đó, nó được gửi tới Ecma International vào năm 1997 để chuẩn hóa, dẫn đến ECMAScript. Đồng thời, vì JavaScript tuân thủ đặc tả ECMAScript, JavaScript là một ví dụ về triển khai ECMAScript.
Điều đó để lại cho chúng tôi một sự thật thú vị này: ECMAScript dựa trên JavaScript và JavaScript dựa trên ECMAScript.
Tôi biết.
Nghe có vẻ giống hệt như trò du hành thời gian của những người trở thành cha mẹ của chính họ – hơi khó hiểu, nhưng thật thú vị khi nghĩ về nó.
Tất cả những điều tốt
Tôi biết tất cả chúng ta đều vui vẻ ở đây, nhưng đó là rất nhiều thông tin cần tiêu hóa. Tôi sẽ nhân cơ hội này để nói lời tạm biệt.
Vui lòng để lại bất kỳ câu hỏi, nhận xét, đề xuất hoặc mối quan tâm nào bên dưới.
Cảm ơn bạn rất nhiều cho việc đọc!