Ai đã phát triển JavaScript

Đến năm 1996, tầm quan trọng của JavaScript tăng lên nhiều đến mức nó được chuyển giao cho một tổ chức ngôn ngữ kịch bản tiêu chuẩn quốc tế có tên là ECMA [Hiệp hội các nhà sản xuất máy tính châu Âu], chịu trách nhiệm phát triển và duy trì ngôn ngữ này cho đến ngày nay. Kết quả là ngôn ngữ kịch bản chính thức được đặt tên là ‘ECMAScript’ [hoặc ‘ECMA-262’], tuy nhiên mọi người vẫn gọi nó là JavaScript. Quy trình tiêu chuẩn ECMA chạy theo chu kỳ - ECMAScript 2 được phát hành vào năm 1998 và ECMAScript 3 được phát hành vào năm 1999, đã phát triển thành JavaScript hiện đại ngày nay. Mặc dù Microsoft đã tiến hành triển khai một số đề xuất bằng ngôn ngữ JScript của họ, rõ ràng là Microsoft sẽ không triển khai JavaScript trong Internet Explorer .

Macromedia & Adobe Join

Năm 2005, Eich và Mozilla đã tham gia ECMA để hỗ trợ E4X [ECMA-357], dẫn đến sự hợp tác với Macromedia [được mua lại bởi . Mục tiêu của sự hợp tác này là chuẩn hóa những gì có trong AS3 và triển khai nó trong E4X in ActionScript 3. Mục tiêu của sự hợp tác này là chuẩn hóa những gì có trong AS3 và triển khai nó trong SpiderMonkey . Kết quả là Adobe đã phát hành Tamarin, một dự án mã nguồn mở có nguồn gốc từ AVM2

Vai trò đang phát triển của nguồn mở

Đồng thời, các cộng đồng nguồn mở và nhà phát triển cũng đang làm việc để cách mạng hóa JavaScript và những gì có thể được thực hiện với nó, đồng thời tác động của cộng đồng lên đến đỉnh điểm với . Bài viết này đã dẫn đến một làn sóng các nhà phát triển bị thu hút bởi JavaScript và các cộng đồng và thư viện nguồn mở xung quanh nó. Các thư viện mới được phát hành bao gồm jQuery, Jesse James Garrett  mô tả một tập hợp các công nghệ mà JavaScript hỗ trợ làm xương sống và là nơi ông tạo ra thuật ngữ Ajax. Bài viết này đã dẫn đến một làn sóng các nhà phát triển bị thu hút bởi JavaScript và các cộng đồng và thư viện nguồn mở xung quanh nó. Các thư viện mới được phát hành bao gồm jQuery, Prototype và Dojo. Lợi thế của Ajax đã đưa JavaScript trở thành tâm điểm chú ý và thu hút nhiều sự chú ý hơn từ các nhà lập trình chuyên nghiệp. Kết quả là sự phổ biến của các khung và thư viện toàn diện, các phương pháp lập trình JavaScript được cải thiện và việc sử dụng JavaScript bên ngoài trình duyệt web ngày càng tăng, thể hiện qua sự phổ biến của các nền tảng JavaScript phía máy chủ. Bước tiếp theo trong lịch sử JavaScript diễn ra vào năm 2008, khi nhiều bên liên quan gặp nhau tại Oslo, dẫn đến thỏa thuận hướng ngôn ngữ này tới việc sử dụng một chương trình nghị sự được gọi là Hài hòa[EcmaScript 6]

Tạo một thư viện tiêu chuẩn chung

Vào tháng 1 năm 2009, dự án CommonJS được thành lập với mục tiêu chỉ định một thư viện tiêu chuẩn chung chủ yếu để phát triển JavaScript bên ngoài trình duyệt. Với sự gia tăng của các ứng dụng trang đơn và các trang web nặng về JavaScript, nó ngày càng được sử dụng làm mục tiêu biên dịch cho các trình biên dịch mã nguồn đến mã nguồn từ cả hai bên. . Đến năm 2016, thống kê cho thấy khoảng 92% tất cả các trang web sử dụng JavaScript - bao gồm một số trang web lớn nhất thế giới như Google và Facebook. Và nhờ có JavaScript, các yếu tố tạo nên những trang web như vậy ngày nay là có thể. Ví dụ: nếu không có JavaScript, chúng tôi sẽ không có các thông báo theo thời gian thực mà ngày nay chúng tôi đã quen nhìn thấy

Xem trên di động ? .

JavaScript hôm nay

Ngày nay, JavaScript vẫn có ở khắp mọi nơi - đó là ngôn ngữ kịch bản phía máy khách được sử dụng phổ biến nhất. JavaScript được viết vào tài liệu HTML và cho phép tương tác với các trang web theo nhiều cách độc đáo. Ví dụ: nhờ JavaScript, chúng tôi có thể tự động sắp xếp các cuộc hẹn và chơi trò chơi trực tuyến. Hơn nữa, những phát triển mới, chẳng hạn như Node. js, cho phép sử dụng JavaScript ở phía máy chủ trong khi API , chẳng hạn như HTML5, cho phép kiểm soát người dùng . media and other device features. Lịch sử JavaScript rất phức tạp nhưng nó chưa kết thúc. Đây là nơi nó có thể trở nên nguy hiểm [có khả năng] - với sự mở rộng mạnh mẽ của JavaScript, tạo ra một sân chơi mới cho tin tặc. Các phương pháp hay nhất về mã hóa an toàn là điều cần thiết cho tất cả các ngôn ngữ lập trình và phát triển - tìm hiểu thêm về mã hóa an toàn cho JavaScript.

JavaScript được cho là một trong những ngôn ngữ quan trọng nhất hiện nay. Sự phát triển của web đã chiếm vị trí của JavaScript mà nó chưa bao giờ được hình thành. Chúng ta hãy xem JavaScript đã phát triển như thế nào trong lịch sử ngắn ngủi của nó và hướng đi của nó. đọc tiếp

"Chúng ta hãy xem JavaScript đã phát triển như thế nào trong lịch sử ngắn ngủi của nó và hướng đi của nó. "

Tweet cái này đi

Tất cả bắt đầu vào những năm 90

Tất cả xảy ra trong sáu tháng từ tháng 5 đến tháng 12 năm 1995. Netscape Communications Corporation đã có một sự hiện diện mạnh mẽ trong web trẻ. Trình duyệt của nó, Netscape Communicator, đã thu hút được sự chú ý khi trở thành đối thủ cạnh tranh với NCSA Mosaic, trình duyệt web phổ biến đầu tiên. Netscape được thành lập bởi chính những người đã tham gia phát triển Mosaic vào đầu những năm 90, và giờ đây, với tiền bạc và sự độc lập, họ có quyền tự do cần thiết để tìm kiếm những cách tiếp theo để mở rộng web. Và đó chính xác là thứ đã khai sinh ra JavaScript

Marc Andreessen, người sáng lập Netscape Communications và là thành viên của nhóm Mosaic cũ, có tầm nhìn rằng web cần một cách để trở nên năng động hơn. Hoạt ảnh, tương tác và các hình thức tự động hóa nhỏ khác sẽ là một phần của web trong tương lai. Vì vậy, web cần một ngôn ngữ kịch bản nhỏ có thể tương tác với DOM [ngôn ngữ này chưa được thiết lập sẵn như hiện tại]. Tuy nhiên, và đây là một lời kêu gọi chiến lược quan trọng vào thời điểm đó, ngôn ngữ kịch bản này không nên hướng đến các nhà phát triển lớn và những người có kinh nghiệm trong lĩnh vực công nghệ phần mềm. Java cũng đang phát triển và các ứng dụng Java sẽ sớm trở thành hiện thực. Vì vậy, ngôn ngữ kịch bản cho web sẽ cần phục vụ cho một loại đối tượng khác. nhà thiết kế. Thật vậy, web là tĩnh. HTML vẫn còn non trẻ và đủ đơn giản để những người không phải là nhà phát triển tiếp thu. Vì vậy, bất cứ điều gì là một phần của trình duyệt để làm cho web năng động hơn đều có thể truy cập được đối với những người không phải là lập trình viên. Và thế là ý tưởng về Mocha ra đời. Mocha đã trở thành một ngôn ngữ kịch bản cho web. Đơn giản, năng động và dễ tiếp cận đối với những người không phải là nhà phát triển

Đây là lúc Brendan Eich, cha đẻ của JavaScript, xuất hiện. Eich đã được Netscape Communications ký hợp đồng để phát triển một "Sơ đồ cho trình duyệt". Scheme là một phương ngữ Lisp và do đó, có rất ít trọng lượng cú pháp. Đó là năng động, mạnh mẽ và chức năng trong tự nhiên. Web cần một cái gì đó thuộc loại. dễ nắm bắt về mặt cú pháp; . Eich nhìn thấy cơ hội làm việc gì đó mà anh ấy thích và tham gia lực lượng

Hiện tại có rất nhiều áp lực phải đưa ra một nguyên mẫu hoạt động càng sớm càng tốt. Ngôn ngữ Java, tên là Oak vào thời điểm đó, đang bắt đầu có sức hút. Sun Microsystems đang thúc đẩy mạnh mẽ nó và Netscape Communications chuẩn bị chốt một thỏa thuận với họ để cung cấp Java trong trình duyệt. Vậy tại sao Mocha [đây là tên ban đầu của JavaScript]? . người viết kịch bản, nghiệp dư, nhà thiết kế. Java quá lớn đối với doanh nghiệp cho vai trò này. Vì vậy, ý tưởng là làm cho Java có sẵn cho những người viết thành phần lớn, chuyên nghiệp; . Nói cách khác, Mocha được coi là người bạn đồng hành viết kịch bản cho Java, theo cách tương tự như mối quan hệ giữa C/C++ và Visual Basic trên nền tảng Windows

Tại thời điểm mọi thứ đang diễn ra, các kỹ sư tại Netscape bắt đầu nghiên cứu chi tiết về Java. Họ đã đi xa đến mức bắt đầu phát triển Máy ảo Java của riêng mình. Tuy nhiên, máy ảo này đã nhanh chóng bị loại bỏ với lý do là nó sẽ không bao giờ đạt được khả năng tương thích hoàn hảo giữa lỗi và lỗi với Sun, một lời kêu gọi kỹ thuật hợp lý vào thời điểm đó

Có rất nhiều áp lực nội bộ để chọn một ngôn ngữ càng sớm càng tốt. Bản thân Python, Tcl, Scheme đều là những ứng cử viên khả dĩ. Vì vậy, Eich đã phải làm việc nhanh chóng. Anh ấy có hai lợi thế so với các lựa chọn thay thế. tự do chọn bộ tính năng phù hợp và đường dây trực tiếp tới những người thực hiện cuộc gọi. Thật không may, anh ấy cũng có một bất lợi lớn. không có thời gian. Rất nhiều quyết định quan trọng phải được đưa ra và có rất ít thời gian để thực hiện chúng. JavaScript, một. k. a. Mocha, ra đời trong bối cảnh này. Chỉ trong vài tuần, một nguyên mẫu hoạt động đã hoạt động và do đó, nó đã được tích hợp vào Netscape Communicator

Ý nghĩa của một Đề án cho trình duyệt đã biến thành một thứ gì đó rất khác. Áp lực hoàn tất thỏa thuận với Sun và biến Mocha trở thành người bạn đồng hành viết kịch bản cho Java đã buộc Eich phải ra tay. Một cú pháp giống như Java là bắt buộc và ngữ nghĩa quen thuộc cho nhiều thành ngữ phổ biến cũng được áp dụng. Vì vậy, Mocha không giống Scheme chút nào. Nó trông giống như một Java năng động, nhưng bên dưới nó là một con thú rất khác. đứa con yêu sớm của Scheme và Self, với ngoại hình Java

Nguyên mẫu của Mocha được tích hợp vào Netscape Communicator vào tháng 5 năm 1995. Trong thời gian ngắn, nó được đổi tên thành LiveScript. Hiện tại, từ "trực tiếp" thuận tiện theo quan điểm tiếp thị. Tháng 12 năm 1995, Netscape Communications và Sun chốt thỏa thuận. Mocha/LiveScript sẽ được đổi tên thành JavaScript và nó sẽ được trình bày dưới dạng ngôn ngữ kịch bản cho các tác vụ phía máy khách nhỏ trong trình duyệt, trong khi Java sẽ được quảng bá như một công cụ chuyên nghiệp, lớn hơn để phát triển các thành phần web phong phú

Phiên bản JavaScript đầu tiên này đã đặt nền móng cho nhiều đặc điểm mà ngôn ngữ này được biết đến ngày nay. Đặc biệt, mô hình đối tượng và các tính năng chức năng của nó đã có mặt trong phiên bản đầu tiên này

Thật khó để nói điều gì sẽ xảy ra nếu Eich không thành công trong việc đưa ra một nguyên mẫu hoạt động kịp thời. Các lựa chọn thay thế đang hoạt động hoàn toàn không giống Java. Python, Tcl, Scheme, rất khác. Sun sẽ khó chấp nhận một ngôn ngữ đồng hành với Java quá khác biệt hoặc ngôn ngữ đó đã có trước Java trong lịch sử và quá trình phát triển. Mặt khác, Java trong một thời gian dài đã là một phần quan trọng của web. Nếu Sun chưa bao giờ là một phần của phương trình, Netscape có thể đã tự do hơn trong việc chọn ngôn ngữ. Đây là sự thật. Nhưng liệu Netscape có chọn áp dụng một giải pháp bên ngoài khi có thể phát triển và kiểm soát nội bộ không?

triển khai khác nhau

Khi Sun và Netscape chốt thỏa thuận đổi tên Mocha/LiveScript thành JavaScript, một câu hỏi lớn đã được đặt ra. điều gì sẽ xảy ra với các triển khai thay thế? . Ngay từ những ngày đầu tiên, JavaScript đã tạo ra sự khác biệt đáng kể trong trải nghiệm người dùng đến mức các trình duyệt cạnh tranh không có lựa chọn nào khác ngoài việc đưa ra một giải pháp hiệu quả, triển khai JavaScript hiệu quả. Hiện tại [và trong một thời gian rất dài], các tiêu chuẩn web không mạnh. Vì vậy, Microsoft đã triển khai phiên bản JavaScript của riêng họ, được gọi là JScript. Bỏ tên "Java" để tránh các sự cố thương hiệu có thể xảy ra. Tuy nhiên, JScript không chỉ khác ở cái tên. Những khác biệt nhỏ trong quá trình triển khai, đặc biệt là liên quan đến một số chức năng DOM nhất định, đã gây ra những gợn sóng vẫn còn tồn tại trong nhiều năm tới trong tương lai. Các cuộc chiến JavaScript diễn ra ở nhiều mặt trận hơn là chỉ tên và mốc thời gian và nhiều điều kỳ quặc của nó chỉ là vết thương của những cuộc chiến này. Phiên bản đầu tiên của JAVAScript được bao gồm trong Internet Explorer 3. 0, phát hành vào tháng 8 năm 1996

Việc triển khai JavaScript của Netscape cũng nhận được một tên nội bộ. Phiên bản được phát hành với Netscape Navigator 2. 0 được gọi là Mocha. Vào mùa thu năm 1996, Eich đã viết lại hầu hết Mocha thành một triển khai sạch hơn để trả khoản nợ kỹ thuật do vội vã bán nó ra khỏi cửa. Phiên bản mới này của công cụ JavaScript của Netscape được gọi là SpiderMonkey. SpiderMonkey vẫn là tên của công cụ JavaScript được tìm thấy trong Firefox, cháu trai của Netscape Navigator

Trong vài năm, JScript và SpiderMonkey là những công cụ JavaScript hàng đầu. Các tính năng do cả hai triển khai, không phải lúc nào cũng tương thích, sẽ xác định trang web sẽ trở thành gì trong những năm tiếp theo

Các tính năng thiết kế chính

Mặc dù JavaScript được sinh ra một cách vội vàng, nhưng một số tính năng mạnh mẽ đã là một phần của nó ngay từ đầu. Các tính năng này sẽ xác định JavaScript là một ngôn ngữ và sẽ cho phép nó phát triển vượt trội so với khu vườn có tường bao quanh bất chấp những điều kỳ quặc của nó

Liệu bất kỳ ngôn ngữ hiện có nào có thể được sử dụng, thay vì phát minh ra một ngôn ngữ mới, cũng không phải là điều tôi quyết định. Yêu cầu từ ban quản lý kỹ thuật cấp cao là ngôn ngữ phải “trông giống Java”. Điều đó đã loại trừ Perl, Python và Tcl, cùng với Scheme. Sau đó, vào năm 1996, John Ousterhout đến chào Tk và than thở về cơ hội bị bỏ lỡ cho Tcl. Tôi không tự hào, nhưng tôi rất vui vì tôi đã chọn các chức năng hạng nhất của Scheme-ish và các nguyên mẫu Self-ish [mặc dù là số ít] làm thành phần chính. Các ảnh hưởng của Java, đặc biệt là các lỗi Ngày y2k nhưng cũng là nguyên thủy so với. phân biệt đối tượng [e. g. , chuỗi so với. String], thật không may. - Blog của Brendan Eich. Phổ biến

Cú pháp giống như Java

Mặc dù giữ cú pháp gần với Java không phải là ý tưởng ban đầu đằng sau JavaScript, nhưng các lực lượng tiếp thị đã thay đổi điều đó. Nhìn lại, mặc dù một cú pháp khác có thể thuận tiện hơn cho một số tính năng nhất định, nhưng không thể phủ nhận rằng một cú pháp quen thuộc đã giúp JavaScript dễ dàng đạt được thành công

So sánh ví dụ Java này

public class Sample {
  public static void main[String[] args] {
    System.out.println["Hello world!"];
    try {
      final MissileSilo silo = new MissileSilo["silo.weapons.mil"];
      silo.launchMissile[args[0]];
    } catch[Exception e] {
      System.out.println["Unexpected exception: " + e];
    }
  }
}

Đối với ví dụ JavaScript [hiện đại] này

console.log['Hello world'];
try {
  const silo = new MissileSilo['silo.weapons.mil'];
  silo.launchMissile[process.argv[0]];
} catch[e] {
  console.log['Unexpected exception' + e];
}

Chức năng như các đối tượng hạng nhất

Trong JavaScript, các hàm chỉ đơn giản là một loại đối tượng nữa. Chúng có thể được truyền xung quanh giống như bất kỳ phần tử nào khác. Chúng có thể được liên kết với các biến và trong phiên bản JavaScript mới hơn, chúng thậm chí có thể bị ném dưới dạng ngoại lệ. Tính năng này là kết quả có thể xảy ra do ảnh hưởng mạnh mẽ của Scheme trong quá trình phát triển JavaScript

var myFunction = function[] {
  console.log['hello'];
}
otherFunction[myFunction];
myFunction.property = '1';

Bằng cách tạo các đối tượng hạng nhất của chức năng, có thể có một số mẫu lập trình chức năng nhất định. Chẳng hạn, các phiên bản JavaScript sau này sử dụng các mẫu chức năng nhất định

var a = [1, 2, 3];
a.forEach[function[e] {
  console.log[e];
}];

Các mẫu này đã được nhiều thư viện khai thác thành công lớn, chẳng hạn như gạch dưới và bất biến. js

Mô hình đối tượng dựa trên nguyên mẫu

Mặc dù mô hình đối tượng dựa trên nguyên mẫu đã được phổ biến bởi JavaScript, nhưng lần đầu tiên nó được giới thiệu bằng ngôn ngữ Self. Eich rất thích mô hình này và nó đủ mạnh để mô hình hóa cách tiếp cận truyền thống hơn của các ngôn ngữ dựa trên Simula như Java hoặc C++. Trên thực tế, các lớp, như được triển khai trong phiên bản JavaScript sau này, không gì khác hơn là đường cú pháp trên hệ thống nguyên mẫu

Một trong những mục tiêu thiết kế của Self, ngôn ngữ tạo cảm hứng cho các nguyên mẫu của JavaScript, là để tránh các vấn đề của các đối tượng kiểu Simula. Đặc biệt, sự phân đôi giữa các lớp và các thể hiện được coi là nguyên nhân của nhiều vấn đề cố hữu trong cách tiếp cận của Simula. Người ta lập luận rằng khi các lớp cung cấp một nguyên mẫu nhất định cho các thể hiện đối tượng, khi mã phát triển và ngày càng lớn hơn, thì việc điều chỉnh các lớp cơ sở đó theo các yêu cầu mới không mong muốn ngày càng khó hơn. Bằng cách biến các thể hiện thành nguyên mẫu mà từ đó các đối tượng mới có thể được xây dựng, hạn chế này đã được loại bỏ. Vì vậy, khái niệm về nguyên mẫu. một phiên bản lấp đầy khoảng trống của một phiên bản mới bằng cách cung cấp hành vi của chính nó. Nếu một nguyên mẫu được coi là không phù hợp với một đối tượng mới, nó có thể được sao chép và sửa đổi một cách đơn giản mà không ảnh hưởng đến tất cả các phiên bản con khác. Điều này được cho là khó thực hiện hơn trong cách tiếp cận dựa trên lớp [tôi. e. sửa đổi các lớp cơ sở]

function Vehicle[maxSpeed] {
    this.maxSpeed = maxSpeed;
}

Vehicle.prototype.maxSpeed = function[] {
    return this.maxSpeed;
}

function Car[maxSpeed] {
    Vehicle.call[this, maxSpeed];
}

Car.prototype = new Vehicle[];

Sức mạnh của các nguyên mẫu làm cho JavaScript trở nên cực kỳ linh hoạt, thúc đẩy sự phát triển của nhiều thư viện với các mô hình đối tượng của riêng chúng. Một thư viện phổ biến có tên là Stampit sử dụng rất nhiều hệ thống nguyên mẫu để mở rộng và thao tác các đối tượng theo những cách không thể thực hiện được bằng cách sử dụng phương pháp dựa trên lớp truyền thống

Các nguyên mẫu đã làm cho JavaScript có vẻ đơn giản, trao quyền cho các tác giả thư viện

Một Quirk lớn. Nguyên thủy so với đối tượng

Có lẽ một trong những sai lầm lớn nhất trong quá trình phát triển vội vã của JavaScript là làm cho một số đối tượng hoạt động giống nhau có các kiểu khác nhau. Chẳng hạn, kiểu của một chuỗi ký tự [

console.log['Hello world'];
try {
  const silo = new MissileSilo['silo.weapons.mil'];
  silo.launchMissile[process.argv[0]];
} catch[e] {
  console.log['Unexpected exception' + e];
}
1] không giống với kiểu của đối tượng
console.log['Hello world'];
try {
  const silo = new MissileSilo['silo.weapons.mil'];
  silo.launchMissile[process.argv[0]];
} catch[e] {
  console.log['Unexpected exception' + e];
}
2 [
console.log['Hello world'];
try {
  const silo = new MissileSilo['silo.weapons.mil'];
  silo.launchMissile[process.argv[0]];
} catch[e] {
  console.log['Unexpected exception' + e];
}
3]. Điều này đôi khi thực thi các lỗi đánh máy không cần thiết và khó hiểu

________số 8

Nhưng đây mới chỉ là khởi đầu trong lịch sử JavaScript. Sự phát triển vội vã của nó khiến một số lỗi thiết kế nhất định trở thành một khả năng quá thực tế. Tuy nhiên, những lợi thế của việc có một ngôn ngữ cho web động không thể bị trì hoãn và lịch sử đã tiếp quản

Phần còn lại là lịch sử đồi trụy, tàn nhẫn. JS đánh bại Java trên máy khách, chỉ bị cạnh tranh bởi Flash, hỗ trợ con đẻ của JS, ActionScript. - Blog của Brendan Eich. Phổ biến

Một sự nhìn lại và hồi tưởng về quá khứ. Nhìn vào Netscape Navigator 2. 0 và 3. 0

Bản phát hành công khai đầu tiên của JavaScript được tích hợp trong Netscape Navigator 2. 0, phát hành năm 1995. Nhờ những điều kỳ diệu của các trang web ảo hóa và phần mềm từ bỏ, chúng ta có thể làm sống lại những khoảnh khắc đó ngày hôm nay

Thật không may, nhiều tính năng cơ bản của JavaScript không hoạt động vào thời điểm đó. Hàm ẩn danh và chuỗi nguyên mẫu, hai tính năng mạnh mẽ nhất không hoạt động như ngày nay. Tuy nhiên, các tính năng này đã là một phần của thiết kế ngôn ngữ và sẽ được triển khai chính xác trong những năm tiếp theo. Cần lưu ý rằng trình thông dịch JavaScript trong bản phát hành này được xem xét ở trạng thái alpha

May thay, một năm sau, Netscape Navigator 3. 0, phát hành năm 1996, đã tạo nên sự khác biệt lớn

Lưu ý cách lỗi cung cấp cho chúng tôi thêm thông tin về những gì đang xảy ra. Điều này chúng ta hãy suy đoán trình thông dịch đang xử lý thuộc tính

console.log['Hello world'];
try {
  const silo = new MissileSilo['silo.weapons.mil'];
  silo.launchMissile[process.argv[0]];
} catch[e] {
  console.log['Unexpected exception' + e];
}
4 theo một cách đặc biệt. Vì vậy, chúng tôi cố gắng thay thế đối tượng bằng một phiên bản
console.log['Hello world'];
try {
  const silo = new MissileSilo['silo.weapons.mil'];
  silo.launchMissile[process.argv[0]];
} catch[e] {
  console.log['Unexpected exception' + e];
}
5 cơ bản mà sau đó chúng tôi sửa đổi. Và thì đấy, nó hoạt động. Phần nào, ít nhất. Bài tập bên trong hàm
console.log['Hello world'];
try {
  const silo = new MissileSilo['silo.weapons.mil'];
  silo.launchMissile[process.argv[0]];
} catch[e] {
  console.log['Unexpected exception' + e];
}
6 dường như không làm gì cả. Rõ ràng là còn rất nhiều việc phải làm. Tuy nhiên, JavaScript ở trạng thái có thể sử dụng được cho nhiều tác vụ và mức độ phổ biến của nó tiếp tục tăng

Các tính năng như biểu thức chính quy, JSON và ngoại lệ vẫn chưa khả dụng. JavaScript sẽ phát triển vượt bậc trong những năm tiếp theo

ECMAScript. JavaScript như một tiêu chuẩn

Thay đổi lớn đầu tiên đối với JavaScript sau khi phát hành ra công chúng là tiêu chuẩn hóa ECMA. ECMA là một hiệp hội ngành được thành lập vào năm 1961 chỉ liên quan đến tiêu chuẩn hóa hệ thống thông tin và truyền thông

Công việc về tiêu chuẩn cho JavaScript được bắt đầu vào tháng 11 năm 1996. Nhận dạng tiêu chuẩn là ECMA-262 và ủy ban phụ trách là TC-39. Vào thời điểm đó, JavaScript đã là một yếu tố phổ biến trong nhiều trang. Thông cáo báo chí từ năm 1996 này đặt số lượng trang JavaScript là 300.000

JavaScript và Java là những công nghệ nền tảng của nền tảng Netscape ONE để phát triển các ứng dụng Internet và Intranet. Trong thời gian ngắn kể từ khi được giới thiệu vào năm ngoái, các ngôn ngữ mới đã được các nhà phát triển chấp nhận nhanh chóng với hơn 175.000 ứng dụng Java và hơn 300.000 trang hỗ trợ JavaScript trên Internet hiện nay theo www. hotbot. com. - Thông cáo báo chí của Netscape

Tiêu chuẩn hóa là một bước quan trọng đối với một ngôn ngữ non trẻ như vậy, nhưng dù sao đó cũng là một lời kêu gọi tuyệt vời. Nó đã mở ra JavaScript cho nhiều đối tượng hơn và có tiếng nói của những người triển khai tiềm năng khác trong quá trình phát triển của ngôn ngữ. Nó cũng phục vụ mục đích kiểm tra những người thực hiện khác. Trước đó, người ta sợ rằng Microsoft hoặc những người khác sẽ đi quá xa so với cách triển khai mặc định và gây ra sự phân mảnh.

Vì lý do nhãn hiệu, ủy ban ECMA không thể sử dụng JavaScript làm tên. Các lựa chọn thay thế cũng không được nhiều người yêu thích, vì vậy sau một số cuộc thảo luận, người ta đã quyết định rằng ngôn ngữ được mô tả theo tiêu chuẩn sẽ được gọi là ECMAScript. Ngày nay, JavaScript chỉ là tên thương mại của ECMAScript

ECMAScript 1 & 2. Trên con đường chuẩn hóa

Tiêu chuẩn ECMAScript đầu tiên dựa trên phiên bản JavaScript được phát hành với Netscape Navigator 4 và vẫn thiếu các tính năng quan trọng như biểu thức chính quy, JSON, ngoại lệ và các phương thức quan trọng cho các đối tượng dựng sẵn. Tuy nhiên, nó hoạt động tốt hơn nhiều trong trình duyệt. JavaScript ngày càng trở nên tốt hơn. Phiên bản 1 được phát hành vào tháng 6 năm 1997

Lưu ý cách kiểm tra nguyên mẫu và chức năng đơn giản của chúng tôi hiện hoạt động chính xác. Rất nhiều công việc đã được thực hiện trong Netscape 4 và JavaScript đã được hưởng lợi rất nhiều từ nó. Ví dụ của chúng tôi bây giờ về cơ bản chạy giống hệt với bất kỳ trình duyệt hiện tại nào. Đây là một trạng thái tuyệt vời cho lần phát hành đầu tiên dưới dạng tiêu chuẩn

Phiên bản thứ hai của tiêu chuẩn, ECMAScript 2, đã được phát hành để khắc phục sự không nhất quán giữa ECMA và tiêu chuẩn ISO cho JavaScript [ISO/IEC 16262], vì vậy không có thay đổi nào đối với ngôn ngữ trong phiên bản này. Nó được phát hành vào tháng 6 năm 1998

Một điểm thú vị của phiên bản JavaScript này là các lỗi không được phát hiện tại thời điểm biên dịch [thường không được xác định] để lại cho trình thông dịch tùy ý phải làm gì với chúng. Điều này là do các ngoại lệ chưa phải là một phần của ngôn ngữ

ECMAScript 3. Những thay đổi lớn đầu tiên

Công việc vẫn tiếp tục sau ECMAScript 2 và những thay đổi lớn đầu tiên đối với ngôn ngữ đã xuất hiện. Phiên bản này đưa vào

  • biểu thức chính quy
  • Khối do-while
  • Ngoại lệ và các khối thử/bắt
  • Các hàm tích hợp khác cho chuỗi và mảng
  • Định dạng cho đầu ra số
  • Toán tử
    console.log['Hello world'];
    try {
      const silo = new MissileSilo['silo.weapons.mil'];
      silo.launchMissile[process.argv[0]];
    } catch[e] {
      console.log['Unexpected exception' + e];
    }
    7 và
    console.log['Hello world'];
    try {
      const silo = new MissileSilo['silo.weapons.mil'];
      silo.launchMissile[process.argv[0]];
    } catch[e] {
      console.log['Unexpected exception' + e];
    }
    8
  • Xử lý lỗi tốt hơn nhiều

ECMAScript 3 được phát hành vào tháng 12 năm 1999

Phiên bản ECMAScript này lan truyền rất xa. Nó được hỗ trợ bởi tất cả các trình duyệt chính vào thời điểm đó và tiếp tục được hỗ trợ nhiều năm sau đó. Thậm chí ngày nay, một số bộ chuyển đổi có thể nhắm mục tiêu phiên bản ECMAScript này khi tạo đầu ra. Điều này làm cho ECMAScript 3 trở thành mục tiêu cơ bản cho nhiều thư viện, ngay cả khi các phiên bản sau của tiêu chuẩn được phát hành

Mặc dù JavaScript được sử dụng nhiều hơn bao giờ hết, nhưng nó vẫn chủ yếu là ngôn ngữ phía máy khách. Nhiều tính năng mới của nó đã đưa nó đến gần hơn với việc thoát ra khỏi cái lồng đó

Netscape Navigator 6, phát hành vào tháng 11 năm 2000 và là một thay đổi lớn so với các phiên bản trước, hỗ trợ ECMAScript 3. Gần một năm rưỡi sau, Firefox, một trình duyệt tinh gọn dựa trên cơ sở mã cho Netscape Navigator, cũng được phát hành hỗ trợ ECMAScript 3. Các trình duyệt này, cùng với Internet Explorer tiếp tục thúc đẩy sự phát triển của JavaScript

Sự ra đời của AJAX

AJAX, JavaScript và XML không đồng bộ, là một kỹ thuật ra đời trong những năm của ECMAScript 3. Mặc dù nó không phải là một phần của tiêu chuẩn, nhưng Microsoft đã triển khai một số tiện ích mở rộng nhất định cho JavaScript cho trình duyệt Internet Explorer 5 của mình. Một trong số đó là hàm

console.log['Hello world'];
try {
  const silo = new MissileSilo['silo.weapons.mil'];
  silo.launchMissile[process.argv[0]];
} catch[e] {
  console.log['Unexpected exception' + e];
}
9 [ở dạng điều khiển XMLHTTP ActiveX]. Chức năng này cho phép trình duyệt thực hiện yêu cầu HTTP không đồng bộ đối với máy chủ, do đó cho phép các trang được cập nhật nhanh chóng. Mặc dù thuật ngữ AJAX không được đặt ra cho đến nhiều năm sau, nhưng kỹ thuật này đã được sử dụng khá nhiều

Thuật ngữ AJAX được đặt ra bởi Jesse James Garrett, đồng sáng lập của Adaptive Path, trong bài đăng blog mang tính biểu tượng này

console.log['Hello world'];
try {
  const silo = new MissileSilo['silo.weapons.mil'];
  silo.launchMissile[process.argv[0]];
} catch[e] {
  console.log['Unexpected exception' + e];
}
9 đã chứng tỏ là một thành công và nhiều năm sau được tích hợp vào tiêu chuẩn riêng của nó [như một phần của nhóm WHATWG và W3C]

Sự phát triển của các tính năng này, một trình triển khai mang lại điều gì đó thú vị cho ngôn ngữ và triển khai nó trong trình duyệt của nó, vẫn là cách JavaScript và các tiêu chuẩn web liên quan như HTML và CSS tiếp tục phát triển. Tuy nhiên, vào thời điểm đó, có rất ít thông tin liên lạc giữa các bên, dẫn đến sự chậm trễ và phân mảnh. Công bằng mà nói, việc phát triển JavaScript ngày nay có tổ chức hơn nhiều, với các quy trình trình bày đề xuất của bất kỳ bên quan tâm nào

Chơi với Netscape Navigator 6

Bản phát hành này hỗ trợ các trường hợp ngoại lệ, các phiên bản trước của showstopper chính bị ảnh hưởng khi cố gắng truy cập Google. Thật đáng kinh ngạc, cố gắng truy cập Google trong phiên bản này dẫn đến một trang hoạt động, có thể xem được, thậm chí cho đến tận ngày nay. Ngược lại, chúng tôi đã cố gắng truy cập Google bằng Netscape Navigator 4 và chúng tôi gặp phải vấn đề thiếu ngoại lệ, hiển thị không đầy đủ và bố cục xấu. Mọi thứ đang phát triển nhanh chóng đối với web, thậm chí vào thời điểm đó

Chơi với Internet Explorer 5

Internet Explorer 5 cũng có khả năng hiển thị phiên bản hiện tại của Google. Tuy nhiên, ai cũng biết rằng có nhiều khác biệt trong việc triển khai một số tính năng nhất định giữa Internet Explorer và các trình duyệt khác. Những khác biệt này đã cản trở web trong nhiều năm và là nguyên nhân gây thất vọng cho các nhà phát triển web trong một thời gian dài, những người thường phải triển khai các trường hợp đặc biệt cho người dùng Internet Explorer

Trên thực tế, để truy cập đối tượng

console.log['Hello world'];
try {
  const silo = new MissileSilo['silo.weapons.mil'];
  silo.launchMissile[process.argv[0]];
} catch[e] {
  console.log['Unexpected exception' + e];
}
9 trong Internet Explorer 5 và 6, cần phải sử dụng ActiveX. Các trình duyệt khác đã triển khai nó như một đối tượng gốc

console.log['Hello world'];
try {
  const silo = new MissileSilo['silo.weapons.mil'];
  silo.launchMissile[process.argv[0]];
} catch[e] {
  console.log['Unexpected exception' + e];
}
7

Có thể cho rằng chính Internet Explorer 5 đã đưa ý tưởng này lên bàn đầu tiên. Mãi đến phiên bản 7, Microsoft mới bắt đầu tuân theo các tiêu chuẩn và sự đồng thuận chặt chẽ hơn. Một số trang web công ty lỗi thời vẫn yêu cầu các phiên bản Internet Explorer cũ để chạy chính xác

ECMAScript 3. 1 và 4. Những năm đấu tranh

Thật không may, những năm tiếp theo không tốt cho sự phát triển của JavaScript. Ngay khi bắt đầu làm việc trên ECMAScript 4, sự khác biệt lớn trong ủy ban bắt đầu xuất hiện. Có một nhóm người cho rằng JavaScript cần các tính năng để trở thành ngôn ngữ mạnh hơn cho việc phát triển ứng dụng quy mô lớn. Nhóm này đã đề xuất nhiều tính năng có phạm vi lớn và thay đổi. Những người khác nghĩ rằng đây không phải là khóa học thích hợp cho JavaScript. Việc thiếu sự đồng thuận và sự phức tạp của một số tính năng được đề xuất đã đẩy việc phát hành ECMAScript 4 ngày càng xa hơn

Công việc trên ECMAScript 4 đã bắt đầu ngay khi phiên bản 3 ra mắt vào năm 1999. Nhiều tính năng thú vị đã được thảo luận nội bộ tại Netscape. Tuy nhiên, sự quan tâm đến việc triển khai chúng đã giảm dần và hoạt động trên phiên bản ECMAScript mới đã dừng lại sau một thời gian vào năm 2003. Một báo cáo tạm thời đã được phát hành và một số nhà triển khai, chẳng hạn như Adobe [ActionScript] và Microsoft [JScript. NET], đã sử dụng nó làm cơ sở cho các công cụ của họ. Năm 2005, tác động của AJAX và

console.log['Hello world'];
try {
  const silo = new MissileSilo['silo.weapons.mil'];
  silo.launchMissile[process.argv[0]];
} catch[e] {
  console.log['Unexpected exception' + e];
}
9 một lần nữa khơi dậy sự quan tâm đến phiên bản JavaScript mới và TC-39 tiếp tục hoạt động. Nhiều năm trôi qua và bộ tính năng ngày càng lớn hơn. Ở đỉnh cao phát triển, ECMAScript 4 có các tính năng như

  • Các lớp học
  • giao diện
  • không gian tên
  • gói
  • Chú thích loại tùy chọn
  • Kiểm tra kiểu tĩnh tùy chọn
  • các loại kết cấu
  • định nghĩa loại
  • đa phương pháp
  • Các loại được tham số hóa
  • Gọi đuôi thích hợp
  • vòng lặp
  • máy phát điện
  • nội quan
  • Loại trình xử lý ngoại lệ phân biệt đối xử
  • ràng buộc liên tục
  • Phạm vi khối thích hợp
  • hủy diệt
  • Biểu thức hàm ngắn gọn
  • Hiểu mảng

Dự thảo ECMAScript 4 mô tả phiên bản mới này nhằm mục đích lập trình trên quy mô lớn. Nếu bạn đã quen thuộc với ECMAScript 6/2015, bạn sẽ nhận thấy rằng nhiều tính năng từ ECMAScript 4 đã được giới thiệu lại trong đó

Mặc dù linh hoạt và mạnh mẽ về mặt hình thức, các cơ sở trừu tượng hóa của ES3 thường không đủ trong thực tế để phát triển các hệ thống phần mềm lớn. Các chương trình ECMAScript đang trở nên lớn hơn và phức tạp hơn với việc áp dụng lập trình Ajax trên web và việc sử dụng rộng rãi ECMAScript làm ngôn ngữ kịch bản và tiện ích mở rộng trong các ứng dụng. Sự phát triển của các chương trình lớn có thể được hưởng lợi đáng kể từ các tiện ích như kiểm tra kiểu tĩnh, ẩn tên, liên kết sớm và các hook tối ưu hóa khác cũng như hỗ trợ trực tiếp cho lập trình hướng đối tượng, tất cả đều không có trong ES3. - Dự thảo ECMAScript 4

Một phần lịch sử thú vị là bảng tính Google Docs sau đây, hiển thị trạng thái triển khai của một số công cụ JavaScript và cuộc thảo luận của các bên liên quan trong đó

Ủy ban đang phát triển ECMAScript 4 được thành lập bởi Adobe, Mozilla, Opera [với tư cách không chính thức] và Microsoft. Yahoo tham gia cuộc chơi vì hầu hết các tiêu chuẩn và tính năng đã được quyết định. Doug Crockford, một nhà phát triển JavaScript có tầm ảnh hưởng, là người được Yahoo cử đến để thực hiện việc này. Anh bày tỏ mối quan ngại của mình để phản đối mạnh mẽ nhiều thay đổi được đề xuất cho ECMAScript 4. Anh nhận được sự ủng hộ mạnh mẽ từ đại diện Microsoft. Theo lời của chính Crockford

Nhưng hóa ra thành viên Microsoft cũng có mối quan tâm tương tự - anh ấy cũng nghĩ rằng ngôn ngữ này đang trở nên quá lớn và mất kiểm soát. Anh ấy đã không nói bất cứ điều gì trước khi tôi tham gia nhóm vì anh ấy lo ngại rằng, nếu Microsoft cố gắng cản trở điều này, thì họ sẽ bị buộc tội có hành vi phản cạnh tranh. Dựa trên hiệu suất trước đây của Microsoft, có thể có một số lý do chính đáng để họ lo ngại về điều đó — và hóa ra, những lo ngại đó là có cơ sở, bởi vì điều đó đã xảy ra. Nhưng tôi đã thuyết phục anh ấy rằng Microsoft nên làm điều đúng đắn, và anh ấy đã quyết định rằng mình nên làm như vậy và có thể thuyết phục Microsoft rằng điều đó nên làm. Vì vậy, Microsoft đã thay đổi vị trí của họ trên ES4. - Douglas Crockford — Hiện trạng và tương lai của JavaScript

Điều bắt đầu là sự nghi ngờ, nhanh chóng trở thành lập trường mạnh mẽ chống lại JavaScript. Microsoft từ chối chấp nhận bất kỳ phần nào của ECMAScript 4 và sẵn sàng thực hiện mọi hành động cần thiết để ngăn tiêu chuẩn này được phê duyệt [thậm chí cả các hành động pháp lý]. May mắn thay, những người trong ủy ban đã quản lý để ngăn chặn một cuộc đấu tranh pháp lý. Tuy nhiên, việc thiếu đồng thuận đã ngăn ECMAScript 4 tiến lên một cách hiệu quả

Một số người ở Microsoft muốn chơi cứng rắn về vấn đề này, họ muốn bắt đầu thiết lập các dấu vết trên giấy tờ, bắt đầu các thủ tục khiếu nại, muốn thực hiện những điều hợp pháp hơn này. tôi không muốn bất kỳ phần nào của điều đó. Sự bất đồng của tôi với ES4 hoàn toàn mang tính kỹ thuật và tôi muốn giữ nó hoàn toàn mang tính kỹ thuật; . Tôi chỉ muốn cố gắng tìm ra điều đúng đắn nên làm là gì, vì vậy tôi đã cố gắng tiết chế nó một chút. Nhưng Microsoft vẫn giữ quan điểm cực đoan, nói rằng họ từ chối chấp nhận bất kỳ phần nào của ES4. Vì vậy, mọi thứ đã bị phân cực, nhưng tôi nghĩ nó bị phân cực do nhóm ES4 từ chối xem xét bất kỳ ý kiến ​​​​nào khác. Tại thời điểm đó, ủy ban không đồng thuận, đó là một điều tồi tệ vì một nhóm tiêu chuẩn cần phải đồng thuận. Một tiêu chuẩn không nên tranh cãi. - Douglas Crockford — Hiện trạng và tương lai của JavaScript

Crockford đã thúc đẩy ý tưởng đưa ra một bộ tính năng đơn giản hơn, giảm bớt cho tiêu chuẩn mới, điều mà tất cả đều có thể đồng ý. không có cú pháp mới, chỉ có những cải tiến thực tế được tạo ra từ kinh nghiệm sử dụng ngôn ngữ. Đề xuất này được gọi là ECMAScript 3. 1

Trong một thời gian, cả hai tiêu chuẩn cùng tồn tại và hai ủy ban không chính thức đã được thành lập. Tuy nhiên, ECMAScript 4 quá phức tạp để hoàn thành khi đối mặt với sự bất hòa. ECMAScript 3. 1 đơn giản hơn nhiều, và bất chấp sự chật vật tại ECMA, nó đã được hoàn thành

Sự kết thúc của ECMAScript 4 đến vào năm 2008, khi Eich gửi một email với bản tóm tắt điều hành của một cuộc họp ở Oslo, trong đó trình bày chi tiết về con đường phía trước của ECMAScript và tương lai của các phiên bản 3. 1 và 4

Kết luận từ cuộc họp đó là

  1. Tập trung làm việc trên ES3. 1 với sự hợp tác đầy đủ của tất cả các bên và nhắm mục tiêu hai triển khai có thể tương tác vào đầu năm tới
  2. Cộng tác trong bước tiếp theo ngoài ES3. 1, sẽ bao gồm các phần mở rộng cú pháp nhưng sẽ khiêm tốn hơn ES4 về cả đổi mới ngữ nghĩa và cú pháp
  3. Một số đề xuất ES4 đã được coi là không phù hợp với Web và không có lợi. gói, không gian tên và ràng buộc sớm. Kết luận này là chìa khóa của Harmony
  4. Các mục tiêu và ý tưởng khác từ ES4 đang được diễn đạt lại để giữ sự đồng thuận trong ủy ban; . 1 tiện ích mở rộng

Nói chung, ECMAScript 4 đã mất gần 8 năm phát triển và cuối cùng đã bị loại bỏ. Một bài học khó khăn cho tất cả những người đã tham gia

Từ "Hòa hợp" xuất hiện trong kết luận trên. Đây là tên dự án cho các tiện ích mở rộng trong tương lai cho JavaScript đã nhận được. Harmony sẽ là giải pháp thay thế mà mọi người có thể đồng ý. Sau khi phát hành ECMAScript 3. 1 [ở dạng phiên bản 5, như chúng ta sẽ thấy bên dưới], ECMAScript Harmony đã trở thành nơi thảo luận tất cả các ý tưởng mới về JavaScript

Tập lệnh hành động

ActionScript là ngôn ngữ lập trình dựa trên bản nháp ban đầu cho ECMAScript 4. Adobe đã triển khai nó như một phần của bộ ứng dụng Flash và là ngôn ngữ kịch bản duy nhất được nó hỗ trợ. Điều này khiến Adobe có lập trường ủng hộ mạnh mẽ ECMAScript 4, thậm chí còn phát hành công cụ của họ dưới dạng mã nguồn mở [Tamarin] với hy vọng tăng tốc độ áp dụng ECMAScript 4. Mike Chambers, một nhân viên của Adobe, đã tiết lộ một điều thú vị về vấn đề này.

ActionScript 3 sẽ không biến mất và chúng tôi sẽ không xóa bất kỳ thứ gì khỏi nó dựa trên các quyết định gần đây. Chúng tôi sẽ tiếp tục theo dõi các thông số kỹ thuật của ECMAScript, nhưng như chúng tôi luôn làm, chúng tôi sẽ đổi mới và thúc đẩy trang web phát triển khi có thể [giống như chúng tôi đã làm trong quá khứ]. - Blog của Mike Chamber

Các nhà phát triển ActionScript hy vọng rằng sự đổi mới trong ActionScript sẽ thúc đẩy các tính năng trong ECMAScript. Thật không may, điều này đã không bao giờ xảy ra và những gì sau đó đến với ECMAScript 2015 theo nhiều cách không tương thích với ActionScript

Một số người coi động thái này là một nỗ lực của Microsoft nhằm duy trì quyền kiểm soát ngôn ngữ và việc triển khai. Công cụ khả thi duy nhất cho ECMAScript 4 vào lúc này là Tamarin, vì vậy Microsoft, hiện có 80% thị phần trình duyệt, có thể tiếp tục sử dụng công cụ [và tiện ích mở rộng] của riêng mình mà không phải trả chi phí chuyển sang giải pháp thay thế của đối thủ cạnh tranh hoặc mất thời gian . Những người khác chỉ đơn giản nói rằng những phản đối của Microsoft chỉ mang tính kỹ thuật, giống như những phản đối của Yahoo. Công cụ của Microsoft, JScript, tại thời điểm này có nhiều điểm khác biệt với các triển khai khác. Một số người coi đây là một cách để bí mật kiểm soát ngôn ngữ

ActionScript ngày nay vẫn là ngôn ngữ dành cho Flash, với sự ra đời của HTML5 đã dần trở nên phổ biến

ActionScript vẫn là giao diện gần nhất với những gì ECMAScript 4 có thể có nếu nó được triển khai bởi các công cụ JavaScript phổ biến

console.log['Hello world'];
try {
  const silo = new MissileSilo['silo.weapons.mil'];
  silo.launchMissile[process.argv[0]];
} catch[e] {
  console.log['Unexpected exception' + e];
}
9

E4X?

E4X là tên một tiện ích mở rộng cho ECMAScript đã nhận được. Nó được phát hành trong những năm phát triển ECMAScript 4 [2004], vì vậy biệt danh E4X đã được sử dụng. Tên thật của nó là ECMAScript cho XML và được chuẩn hóa thành ECMA-357. E4X mở rộng ECMAScript để hỗ trợ xử lý gốc và phân tích cú pháp nội dung XML. XML được coi là kiểu dữ liệu gốc trong E4X. Nó đã được các công cụ JavaScript lớn, chẳng hạn như SpiderMonkey, sử dụng ban đầu, nhưng sau đó nó đã bị loại bỏ do không được sử dụng. Nó đã bị xóa khỏi Firefox trong phiên bản 21

Ngoài số "4" trong tên của nó, E4X không liên quan nhiều đến ECMAScript 4

Một ví dụ về những gì E4X đã sử dụng để mang lên bàn

var myFunction = function[] {
  console.log['hello'];
}
otherFunction[myFunction];
myFunction.property = '1';
0

Có thể cho rằng, các định dạng dữ liệu khác [chẳng hạn như JSON] đã được chấp nhận rộng rãi hơn trong cộng đồng JavaScript, vì vậy E4X đến và đi mà không gặp nhiều trở ngại

ECMAScript 5. Sự tái sinh của JavaScript

Sau một thời gian dài vật lộn với ECMAScript 4, từ năm 2008 trở đi, cộng đồng tập trung vào ECMAScript 3. 1. ECMAScript 4 đã bị loại bỏ. Trong năm 2009 ECMAScript 3. 1 đã được hoàn thành và ký tắt bởi tất cả các bên liên quan. ECMAScript 4 đã được công nhận là một biến thể cụ thể của ECMAScript ngay cả khi không có bất kỳ bản phát hành thích hợp nào, vì vậy, ủy ban đã quyết định đổi tên ECMAScript 3. 1 đến ECMAScript 5 để tránh nhầm lẫn

ECMAScript 5 đã trở thành một trong những phiên bản JavaScript được hỗ trợ nhiều nhất và cũng trở thành mục tiêu biên dịch của nhiều bộ chuyển mã. ECMAScript 5 được hỗ trợ hoàn toàn bởi Firefox 4 [2011], Chrome 19 [2012], Safari 6 [2012], Opera 12. 10 [2012] và Internet Explorer 10 [2012]

ECMAScript 5 là một bản cập nhật khá khiêm tốn cho ECMAScript 3, nó bao gồm

  • Getter/setters
  • Dấu phẩy trong mảng và đối tượng bằng chữ
  • Các từ dành riêng làm tên thuộc tính
  • Các phương thức
    console.log['Hello world'];
    try {
      const silo = new MissileSilo['silo.weapons.mil'];
      silo.launchMissile[process.argv[0]];
    } catch[e] {
      console.log['Unexpected exception' + e];
    }
    5 mới [
    var myFunction = function[] {
      console.log['hello'];
    }
    otherFunction[myFunction];
    myFunction.property = '1';
    4,
    var myFunction = function[] {
      console.log['hello'];
    }
    otherFunction[myFunction];
    myFunction.property = '1';
    5,
    var myFunction = function[] {
      console.log['hello'];
    }
    otherFunction[myFunction];
    myFunction.property = '1';
    6,
    var myFunction = function[] {
      console.log['hello'];
    }
    otherFunction[myFunction];
    myFunction.property = '1';
    7,
    var myFunction = function[] {
      console.log['hello'];
    }
    otherFunction[myFunction];
    myFunction.property = '1';
    8,
    var myFunction = function[] {
      console.log['hello'];
    }
    otherFunction[myFunction];
    myFunction.property = '1';
    9, v.v. ]
  • Các phương thức
    var a = [1, 2, 3];
    a.forEach[function[e] {
      console.log[e];
    }];
    0 mới [
    var a = [1, 2, 3];
    a.forEach[function[e] {
      console.log[e];
    }];
    1,
    var a = [1, 2, 3];
    a.forEach[function[e] {
      console.log[e];
    }];
    2,
    var a = [1, 2, 3];
    a.forEach[function[e] {
      console.log[e];
    }];
    3,
    var a = [1, 2, 3];
    a.forEach[function[e] {
      console.log[e];
    }];
    4,
    var a = [1, 2, 3];
    a.forEach[function[e] {
      console.log[e];
    }];
    5,
    var a = [1, 2, 3];
    a.forEach[function[e] {
      console.log[e];
    }];
    6,
    var a = [1, 2, 3];
    a.forEach[function[e] {
      console.log[e];
    }];
    7, v.v. ]
  • var a = [1, 2, 3];
    a.forEach[function[e] {
      console.log[e];
    }];
    8 và truy cập tài sản
  • Phương thức
    var a = [1, 2, 3];
    a.forEach[function[e] {
      console.log[e];
    }];
    9 mới [
    function Vehicle[maxSpeed] {
        this.maxSpeed = maxSpeed;
    }
    
    Vehicle.prototype.maxSpeed = function[] {
        return this.maxSpeed;
    }
    
    function Car[maxSpeed] {
        Vehicle.call[this, maxSpeed];
    }
    
    Car.prototype = new Vehicle[];
    0,
    function Vehicle[maxSpeed] {
        this.maxSpeed = maxSpeed;
    }
    
    Vehicle.prototype.maxSpeed = function[] {
        return this.maxSpeed;
    }
    
    function Car[maxSpeed] {
        Vehicle.call[this, maxSpeed];
    }
    
    Car.prototype = new Vehicle[];
    1,
    function Vehicle[maxSpeed] {
        this.maxSpeed = maxSpeed;
    }
    
    Vehicle.prototype.maxSpeed = function[] {
        return this.maxSpeed;
    }
    
    function Car[maxSpeed] {
        Vehicle.call[this, maxSpeed];
    }
    
    Car.prototype = new Vehicle[];
    2]
  • Chức năng
    function Vehicle[maxSpeed] {
        this.maxSpeed = maxSpeed;
    }
    
    Vehicle.prototype.maxSpeed = function[] {
        return this.maxSpeed;
    }
    
    function Car[maxSpeed] {
        Vehicle.call[this, maxSpeed];
    }
    
    Car.prototype = new Vehicle[];
    3
  • JSON
  • Các đối tượng toàn cục bất biến [
    function Vehicle[maxSpeed] {
        this.maxSpeed = maxSpeed;
    }
    
    Vehicle.prototype.maxSpeed = function[] {
        return this.maxSpeed;
    }
    
    function Car[maxSpeed] {
        Vehicle.call[this, maxSpeed];
    }
    
    Car.prototype = new Vehicle[];
    4,
    function Vehicle[maxSpeed] {
        this.maxSpeed = maxSpeed;
    }
    
    Vehicle.prototype.maxSpeed = function[] {
        return this.maxSpeed;
    }
    
    function Car[maxSpeed] {
        Vehicle.call[this, maxSpeed];
    }
    
    Car.prototype = new Vehicle[];
    5,
    function Vehicle[maxSpeed] {
        this.maxSpeed = maxSpeed;
    }
    
    Vehicle.prototype.maxSpeed = function[] {
        return this.maxSpeed;
    }
    
    function Car[maxSpeed] {
        Vehicle.call[this, maxSpeed];
    }
    
    Car.prototype = new Vehicle[];
    6]
  • Chế độ nghiêm ngặt
  • Các thay đổi nhỏ khác [________ 47 bỏ qua các số 0 đứng đầu, các hàm được ném có giá trị ________ 48 phù hợp, v.v. ]

Không có thay đổi nào cần thay đổi cú pháp. Getters và setters đã được hỗ trợ không chính thức bởi nhiều trình duyệt khác nhau vào thời điểm đó. Các phương pháp

console.log['Hello world'];
try {
  const silo = new MissileSilo['silo.weapons.mil'];
  silo.launchMissile[process.argv[0]];
} catch[e] {
  console.log['Unexpected exception' + e];
}
5 mới cải thiện "việc lập trình trên quy mô lớn" bằng cách cung cấp cho các lập trình viên nhiều công cụ hơn để đảm bảo các giá trị bất biến nhất định được thực thi [
> typeof "hello world"
 typeof new String['hello world']
 typeof "hello world"
 typeof new String['hello world']
 typeof "hello world"
 typeof new String['hello world']
 typeof "hello world"
 typeof new String['hello world']

Chủ Đề