メインコンテンツまでスキップ

Javascript History

Tổng quan

JavaScript là một ngôn ngữ kịch bản hướng đối tượng dựa trên nguyên mẫu (prototype-based) xuất hiện trong thập kỷ 1990. Ban đầu, nó được sử dụng chủ yếu trong trình duyệt web và trở nên phổ biến do tính đơn giản của nó. Phiên bản 3.0 của IE11 đã tích hợp sẵn JavaScript và từ đó, ngôn ngữ này được sử dụng rộng rãi. Để giải quyết sự khác nhau về đặc tả do các trình duyệt gây ra, Ecma International - một tổ chức tiêu chuẩn hóa quốc tế - đã tiêu chuẩn hóa ngôn ngữ JavaScript thành EcmaScript. JavaScript tuân thủ các quy định của EcmaScript, và do đó, việc gọi JavaScript và EcmaScript là như nhau trong môi trường thực thi của JavaScript. Ban đầu, JavaScript chủ yếu được sử dụng trong phát triển web, nhưng gần đây đã xuất hiện môi trường thực thi trên máy chủ, và ngôn ngữ này đã phát triển bằng cách tích hợp các tính năng dựa trên Class (class-based).

Ngôn ngữ kịch bản hướng đối tượng dựa trên nguyên mẫu (prototype-based).

Prototype-based, hay còn gọi là instance-based, là một trong các kiểu lập trình hướng đối tượng (OOP) mà sử dụng clone (duplicate) đối tượng có sẵn để tạo ra đối tượng. Self của Smalltalk dialect chính là nguồn gốc của OOP prototype-based. Mặc dù thiết kế class-based nguyên thủy được phát triển rất tốt về mặt nguyên lý, nhưng lại phức tạp về mặt thực tế nên không được các developer đánh giá cao. Vì vậy style này được thiết kế ra để cải thiện việc đó. Hiện tại, thiết kế class-based bắt nguồn từ C++/Python đang được áp dụng ở rất nhiều ngôn ngữ, nên prototype-based bắt nguồn từ Self đang là thiểu số. Ngoài JavaScript, EcmaScript được xem là đại diện cho prototype-based đã được tích hợp cú pháp class-based và TypeScript là sự pha trộn giữa class-based và prototype-based. Có thể kết luận là prototype-based có phần thiếu sót về tính linh hoạt và không thể trở thành xu hướng chủ đạo của kiểu lập trình hướng đối tượng.

Việc xây dựng object có thể được thực hiện bằng cả phương thức clone lẫn phương thức ex nihilo. Clone là phương thức duplicate đối tượng có sẵn, rồi sau khi duplicate thì property/method có thể tự do gắn vào và gỡ ra đều được. Ex nihilo là phương thức tạo (hoặc duplicate) đối tượng trống, không có property/method, rồi sau khi tạo xong thì có thể thêm property/method vào tự do. Phương thức khởi tạo và tạo ra property/method bằng format giống với thể cấu trúc cũng được phân loại là ex nihilo. Do không có khái niệm class nên không thể tạo object dưới dạng xử lý template được, nhưng có thể được thực hiện bằng các ngôn ngữ đã tích hợp cú pháp class-based. Điều này đã được phía ex nihilo giải nghĩa. Nếu sử dụng class-based trong Javascript thì nó sẽ được giải nghĩa bằng phương thức ex nihilo.

Dòng thời gian

  • 1995

    • JavaScript được phát triển bởi NetScape. Ban đầu, nó được gọi là LiveScript.
  • 1996

    • IE 3.0 được trang bị ngôn ngữ JavaScript tương thích, được gọi là JScript, nhưng hai ngôn ngữ này không tương thích với nhau.
    • Future Splash Player, sau này trở thành Flash, được ra mắt và trở nên phổ biến.
  • 1997

    • NetScape yêu cầu Ecma đưa ngôn ngữ JavaScript thành tiêu chuẩn để giải quyết vấn đề tương thích giữa JScript và JavaScript. Phiên bản đầu tiên của EcmaScript được phát hành.
  • 1998

    • EcmaScript 2.0 được phát hành.
  • 1999

    • Trong IE 5.0, xuất hiện ActiveX, là nguyên mẫu của XMLHttpRequest (XHR).
    • EcmaScript 3.0 được phát hành, bao gồm các tính năng như biểu thức chính quy (regular expressions) và xử lý ngoại lệ try/catch.
  • 2000

    • JavaScript bắt đầu được sử dụng rộng rãi nhờ sự tương thích giữa các trình duyệt. Tuy nhiên, JavaScript cũng bị hạn chế do vấn đề về hiệu ứng đồ họa không cần thiết và vấn đề bảo mật.
    • EcmaScript 4.0 chưa được hoàn thiện và tiến trình tiêu chuẩn hóa của JavaScript bị trì hoãn.
    • ActionScript, dựa trên ECMA Script, được tích hợp vào Flash, tạo nên sự yêu cầu cao về Flash.
  • 2005

    • Sự xuất hiện của Google Map và Gmail (sử dụng Ajax) đã làm JavaScript trở nên phổ biến. Kỹ thuật giao tiếp bất đồng bộ thông qua XHR trở nên phổ biến.
    • Các thư viện JavaScript như prototype.js xuất hiện, cho phép tạo ra các hiệu ứng đồ họa phong phú hơn.
  • 2006

    • jQuery, một thư viện JavaScript cho phép dễ dàng thao tác DOM, sự kiện, hiệu ứng và Ajax, được phát hành.
    • Thông số kỹ thuật tiêu chuẩn hóa cho JSON lần đầu tiên được xác định.
  • 2008

    • Google Chrome (sử dụng engine V8) ra đời, cải thiện tốc độ thực thi JavaScript.
  • 2009

    • Mozilla khởi xướng dự án ServerJS (sau này là CommonJS).
    • Node.js, một môi trường thực thi JavaScript phía máy chủ chạy trên môi trường V8
    • EcmaScript 5.0
      • Cấu trúc chặt chẽ
      • Hỗ trợ thư viện JSON
      • Đã thêm getters, setters, v.v.
    • Các khung có kiến ​​trúc để giải quyết các vấn đề với jQuery và Ajax sẽ bắt đầu xuất hiện sau năm nay.
      • Backborn.js
      • Corner.js
      • Ember.js
  • 2010

    • Apple chỉ ra các vấn đề với Flash và khuyến nghị HTML5, thông báo iPhone và iPad sẽ không hỗ trợ Flash.
  • 2011

    • Adobe thông báo ngừng phát triển Flash.
    • WebSocket nổi lên như một giao thức thay thế để giải quyết vấn đề long-polling của XHR.
  • 2012

    • TypeScript với kiểu gõ tĩnh và hướng đối tượng dựa trên Class đến từ Microsoft.
  • 2013

    • Thông báo rằng trình quản lý gói Node.js npm sẽ ngừng hỗ trợ tích cực cho CommonJS.
    • Phiên bản đầu tiên của React.js sắp ra mắt, cú pháp JSX xuất hiện.
  • 2014

    • Thông số kỹ thuật chính thức của HTML5 được khuyến nghị.
    • Phiên bản đầu tiên của Vue.js sắp ra mắt.
  • 2015

    • EcmaScript 6.0
      • let, const, Map, Set, WeakMap, WeakSet, Symbol, Promise
      • Các lớp, mô-đun, trình vòng lặp, trình tạo, hàm mũi tên, chữ mẫu, phép gán phá hủy, đối số biến đổi
      • Thêm nhiều chức năng khác
    • Giới thiệu Babel, một bộ chuyển đổi được tạo bởi Node.js.
      • Có thể chuyển đổi mô tả theo cú pháp mới từ ES6 trở lên sang mô tả cũ từ ES5 trở xuống.
      • Bằng cách sử dụng Polyfill, các tính năng hoàn toàn mới như Promise có thể được sử dụng trong môi trường cũ.
  • 2016

    • EcmaScript 7.0
      • Toán tử lũy thừa
      • Array.prototype.includes
  • 2017

    • EcmaScript 8.0
      • Chức năng không đồng bộ (async/await)
      • Đối tượng getOwnPropertyDescriptors
      • String.padStart/padEnd
      • Object.values/entries
      • SharedArrayBuffer và Atomics
  • 2018

    • Nhà phát triển Node.js công bố môi trường thực thi mới Deno.
    • EcmaScript 9.0
      • Trải rộng cú pháp trên các đối tượng, vòng lặp bất đồng bộ.
  • 2019

    • EcmaScript 10.0
      • Array.prototype.flat, Array.prototype.flatMap, Object.fromEntries
  • 2020

    • Github đã mua lại nhà phát triển của trình quản lý gói npm