Chúng ta cùng xem xét sự phát triển của JavaScript, được cho là một trong những ngôn ngữ quan trọng nhất hiện nay và ngày mai

Bạn đang xem: javascript được phát minh khi nào

JavaScript là được cho là một trong những ngôn ngữ quan trọng nhất hiện nay. Sự nổi lên của web đã đưa JavaScript đến những vị trí mà nó chưa từng đượ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à vị trí của nó. Đọc tiếp!

Mọi chuyện bắt đầu từ những năm 90

Tất cả diễn 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 lĩnh vực web trẻ. Trình duyệt của nó, Netscape Communicator, đã 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 vào quá trình phát triển Mosaic vào đầu những năm 90, và hiện tại, với tiền và sự độc lập, họ có quyền tự do cần thiết để tìm kiếm những cách xa hơn để 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à một phầ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 dạng tự động hóa nhỏ khác nên 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 không được thiết lập sẵn như bây giờ). 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 dành cho các nhà phát triển tầm cỡ và những người có kinh nghiệm trong lĩnh vực kỹ thuật phần mềm của mọi thứ. Java cũng đang trên đà phát triển và các applet 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ải phục vụ cho một loại đối tượng khác: cá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 có thể tiếp nhận. Vì vậy, bất cứ thứ gì thuộc về trình duyệt để làm cho web năng động hơn đều phải 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ữ viết 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 “Đề án cho trình duyệt”. Scheme là một phương ngữ Lisp và như vậy, đi kèm với rất ít trọng lượng cú pháp. Bản chất là năng động, mạnh mẽ và hoạt động hiệu quả. Web cần một cái gì đó thuộc loại: dễ nắm bắt về mặt cú pháp; năng động, để giảm độ dài và tăng tốc độ phát triển; và mạnh mẽ. Eich nhận thấy có cơ hội làm việc trên một lĩnh vực nào đó mà anh ấy thích và hợp tác.

Hiện tại, có rất nhiều áp lực để đưa ra một nguyên mẫu hoạt động càng sớm càng tốt. Ngôn ngữ Java, nhũ danh Oak vào thời điểm đó, đang bắt đầu có sức hút. Sun Microsystems đang tạo ra một cú hích lớn cho nó và Netscape Communications sắp hoàn tấ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)? Tại sao phải tạo một ngôn ngữ hoàn toàn mới khi đã có một ngôn ngữ thay thế? Ý tưởng vào thời điểm đó là Java không phù hợp với loại đối tượng sẽ sử dụng Mocha: người viết kịch bản, nghiệp dư, nhà thiết kế. Java quá lớn, quá táo bạo 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; trong khi Mocha sẽ được sử dụng cho các tác vụ kịch bản nhỏ. Nói cách khác, Mocha được coi là người bạn đồng hành về 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 này, tất cả đều tiếp tục, các kỹ sư tại Netscape bắt đầu nghiên cứu Java một cách chi tiết. Họ đã tiến xa hơn khi 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ị bắn hạ với lý do rằng nó sẽ không bao giờ đạt được khả năng tương thích hoàn hảo với lỗi hoàn hảo với của Sun, một cuộc gọi kỹ thuật âm thanh vào thời điểm đó.

Còn 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 thật nhanh. Anh ta có hai lợi thế so với các lựa chọn thay thế: tự do chọn tập hợp các tính năng phù hợp và liên hệ trực tiếp với những người đã thực hiện cuộc gọi. Thật không may, anh ta 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 thực hiện và có rất ít thời gian để thực hiện chúng. JavaScript, còn gọi là Mocha, ra đời trong bối cảnh này. Trong vài tuần, một nguyên mẫu hoạt động đã hoạt động được và do đó nó đã được tích hợp vào Netscape Communicator.

Ý nghĩa là một Đề án cho trình duyệt đã biến thành một thứ gì đó rất khác. Áp lực phải hoàn tất thỏa thuận với Sun và biến Mocha trở thành người đồ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 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 sử 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 cưng của Scheme và Self, với vẻ ngoài của 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. Tóm lại thời gian, nó được đổi tên thành LiveScript. Hiện tại, từ “trực tiếp” là thuận tiện từ quan điểm tiếp thị. Vào 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ạo ra 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 tạo ra một nguyên mẫu trong thời gian. Các lựa chọn thay thế làm việc không giống Java chút nào. Python, Tcl, Scheme, rất khác nhau. Sẽ rất khó để Sun 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 chính Java trong lịch sử và sự phát triển. Mặt khác, Java từ lâu đã là một phần quan trọng của web. Nếu Sun không bao giờ là một phần của phương trình, Netscape có thể đã thực hiện nhiều quyền tự do hơn trong việc lựa chọn một 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 một giải pháp được kiểm soát và phát triển bên trong có thể thực hiện được không? Chúng tôi sẽ không bao giờ biết được.

Các cách triển khai khác nhau

Khi Sun và Netscape chốt thỏa thuận đổi tên Mocha / LiveScript thành JavaScript a 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ế? Thật vậy, mặc dù Netscape nhanh chóng trở thành trình duyệt được ưa thích vào thời điểm đó, nhưng Internet Explorer cũng đang được phát triển bởi Microsoft. 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 hoạt động, một triển khai JavaScript hoạt động. 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. Giữ tên “Java” tránh các vấn đề nhãn hiệu có thể xảy ra. Tuy nhiên, JScript không chỉ khác ở cái tên mà thôi. Sự khác biệt nhỏ trong việc 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 mà vẫn còn có thể cảm nhận được trong nhiều năm tới. Các cuộc chiến JavaScript đã diễn ra trên nhiều mặt trận hơn là chỉ tên và dòng 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 JScript được bao gồm trong Internet Explorer 3.0, được 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 phần lớn Mocha thành một bản triển khai gọn gàng hơn để thanh toán khoản nợ kỹ thuật do vội vàng mua nó ra khỏi cửa. Phiên bản mới này của công cụ JavaScript Netscape được gọi là SpiderMonkey. SpiderMonkey vẫn là tên của engine JavaScript có trong Firefox, cháu trai của Netscape Navigator.

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

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

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

Liệu có thể sử dụng bất kỳ ngôn ngữ hiện tại nào, thay vì phát minh ra ngôn ngữ mới hay không. cũng không phải là điều tôi quyết định. Diktat từ quản lý kỹ thuật cấp trên là ngôn ngữ phải “trông giống như Java”. Điều đó đã loại trừ Perl, Python và Tcl, cùng với Scheme. Sau đó, vào năm 1996, John Ousterhout đến sân 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 hàm hạng nhất của Scheme-ish và các nguyên mẫu Self-ish (mặc dù số ít) làm thành phần chính. Những ảnh hưởng của Java, đặc biệt là lỗi y2k Date cũng như sự khác biệt nguyên thủy so với đối tượng (ví dụ: chuỗi so với chuỗi), thật không may. – Blog của Brendan Eich: Mức độ phổ biến

Cú pháp giống Java

Mặc dù giữ cú pháp gần giống 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 cơ sở.

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

 < code class = "language-java"> 

public

class

Mẫu < / p>

{

public

static

void

main

(

Chuỗi

[

]

args

)

{

Hệ thống

.

ra

.

println

(

" Xin chào thế giới! "

)

;

thử

{

final

MissileSilo

silo

=

mới

MissileSilo

(

" silo .weapons.mil "

)

;

silo

.

khởi chạyMissile

(

args

[

0

]

)

;

}

bắt

(

Ngoại lệ

e

)

{

Hệ thống

.

ra

.

println

(

" Ngoại lệ không mong muốn: "

+

e

)

;

}

}

}

Đối với ví dụ JavaScript (hiện đại) này:

  bảng điều khiển 

.

nhật ký

(

'Xin chào thế giới'

)

;

thử

{

const

silo

=

new

MissileSilo

(

'silo.weapons.mil'

)

;

silo

.

khởi chạyMissile

(

process

.

argv

[

0

]

)

;

}

bắt

(

e

)

{

bảng điều khiển

.

nhật ký

(

'Trường hợp ngoại lệ không mong muốn'

+

e

)

; < / p>

}

Chức năng với tư cách là các đối tượng hạng nhất

Trong JavaScript, các hàm chỉ đơn giản là một kiểu đối tượng. 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ể bị ràng buộc với các biến, và trong phiên bản JavaScript mới hơn, chúng thậm chí có thể được đưa ra làm ngoại lệ. Tính năng này là kết quả có thể xảy ra của Lược đồ ảnh hưởng mạnh mẽ trong quá trình phát triển JavaScript.

  

var

myFunction

=

hàm

(

)

{

bảng điều khiển

.

nhật ký

(

'xin chào'

)

;

}

otherFunction

(

myFunction

)

;

myFunction

.

property

=

'1'

;

Bằng cách tạo các đối tượng hạng nhất của hàm, một số mẫu lập trình hàm nhất định có thể thực hiện được. Ví dụ: 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

,

[p>

2

,

3

]

;

a

.

forEach

(

hàm

(

e

)

< p class = "dấu chấm câu mã thông báo"> {

bảng điều khiển

.

nhật ký

(

e

)

;

}

)

;

Những mẫu này đã được nhiều thư viện khai thác để đạt được thành công lớn, chẳng hạn như gạch dưới immutable.js .

Prototype-Based Object Model

Mặc dù mô hình đối tượng dựa trên nguyên mẫu đã được phổ biến bằng JavaScript, nó được giới thiệu lần đầu tiên bằng ngôn ngữ Tự. Mỗi người đều có sở thích mạnh mẽ đối với 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 các phiên bản JavaScript sau này, chẳng qua là đường cú pháp nằm trên hệ thống nguyên mẫu để 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 cho 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 cá thể đối tượng, khi mã phát triển và lớn hơn, việc điều chỉnh các lớp cơ sở đó theo các yêu cầu mới không mong đợi ngày càng trở nên khó khăn hơn. Bằng cách tạo các thể hiện về kiểu 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ỏ. Do đó, khái niệm về nguyên mẫu: một thể hiện lấp đầy những khoảng trống của một thể hiệ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 cho 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 đối tượng 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ức là sửa đổi các lớp cơ sở).

Xe

(

maxSpeed ​​

)

{

cái này

dấu chấm câu “>;

}

Xe

.

nguyên mẫu

.

maxSpeed ​​

=

hàm

(

)

{

return

this

.

maxSpeed ​​

;

}

function

Car

(

maxSpeed ​​

)

{

Xe

gọi

gọi

> (

cái này

,

maxSpeed ​​

)

;

}

Xe

.

nguyên mẫu

=

mới

Xe

(

) < / p>

;

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 Stampit sử dụng 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 tiếp cận dựa trên lớp truyền thống. < / p>

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

A Big Quirk: Primainst vs Objects

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 tương tự có nhiều kiểu khác nhau. Ví dụ: kiểu của chuỗi chữ ( "Hello world" ) không giống với kiểu của Chuỗi object ( new String ('Hello world') ). Điều này đôi khi thực thi những lỗi đánh máy không cần thiết và khó hiểu.

  

& gt;

typeof

"hello world"

& lt;

"string"

& gt;

typeof

new

Chuỗi

(

'xin chào thế giới'

)

& lt;

"object"

Nhưng đây mới chỉ là bước khởi đầu trong JavaScript lịch sử. Sự phát triển vội vã của nó đã khiến một số sai lầm trong thiết kế trở thành một khả năng quá thực tế. Tuy nhiên, 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ử tồi tệ, tàn nhẫn. JS đánh bại Java trên máy khách, đối thủ chỉ bằng Flash, hỗ trợ con đẻ của JS, ActionScript. - Blog của Brendan Eich: Mức độ phổ biến

A Trip Down Memory Lane: A Look at Netscape Navigator 2.0 và 3.0

Công chúng đầu tiên phát hành JavaScript đã được tích hợp trong Netscape Navigator 2.0, phát hành vào năm 1995. Nhờ sự kỳ diệu của ảo hóa và các trang web có phần mềm bỏ rơi, chúng ta có thể hồi sinh những khoảnh khắc đó ngày nay!

Thật không may, nhiều tính năng cơ bản JavaScript không hoạt động vào thời điểm đó. Các chức năng ẩ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, những 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 coi là ở trạng thái alpha.

May mắn thay, một năm sau, Netscape Navigator 3.0, được phát hành vào năm 1996, đã tạo ra 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 cho phép chúng tôi suy đoán trình thông dịch đang xử lý thuộc tính nguyên mẫu 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 đối tượng Object cơ bản mà sau đó chúng tôi sửa đổi. Et voilá, nó hoạt động! Một phần nào đó, ít nhất. Việc gán bên trong hàm test dường như không thực hiện được gì. Rõ ràng, có rất nhiều việc cần phải làm. Tuy nhiên, JavaScript ở trạng thái của nó có thể sử dụng được cho nhiều tác vụ và tính phổ biến của nó tiếp tục phát triển.

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

ECMAScript: JavaScript làm tiêu chuẩn

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

Làm việc trên tiêu chuẩn cho JavaScript là bắt đầu vào tháng 11 năm 1996. Việc xác định 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 đưa số lượng trang JavaScript lên 300.000 trang.

JavaScript và Java là những công nghệ nền tảng của Netscape ONE nền tảng để 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 thì cũng là một cuộc gọi tuyệt vời. Nó mở ra JavaScript cho nhiều đối tượng hơn và mang lại cho những người triển khai tiềm năng khác tiếng nói trong sự phát triển của ngôn ngữ này. Nó cũng phục vụ mục đích kiểm tra những người triển khai khác. Vào thời điểm đó, người ta lo ngại rằng Microsoft hoặc những người khác sẽ đi quá xa so với 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 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ả bởi 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 & amp; 2: Trên đường đến tiêu 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 đã bỏ lỡ 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 nội trang. 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 các 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 như thế nào. 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à trạng thái tuyệt vời dành cho phiên bản đầu tiên làm 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ự mâu thuẫn giữa ECMA và tiêu chuẩn ISO dành cho JavaScript (ISO / IEC 16262 ), vì vậy không có thay đổi nào đối với ngôn ngữ là một phần của nó. Nó được phát hành vào tháng 6 năm 1998.

Một điểm kỳ lạ 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 (nói chung là không xác định) để lại cho người thông dịch ý muốn. làm về 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: The First Big Changes

Work đã tiếp tục qua ECMAScript 2 và những thay đổi lớn đầu tiên đối với ngôn ngữ đã được hé lộ. Phiên bản này mang lại:

  • Cụm từ thông dụng
  • Khối do-while
  • Các ngoại lệ và các khối try / catch
  • Các hàm tích hợp khác cho chuỗi và mảng
  • Định dạng cho đầu ra dạng số
  • trong

    instanceof

  • 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 này của ECMAScript được lan truyền rộng rãi. Nó được hỗ trợ bởi tất cả các trình duyệt lớn 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 mã có thể nhắm mục tiêu phiên bản ECMAScript này khi sản xuất đầu ra. Điều này khiến 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, 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ó đã giúp nó tiến gần hơn đến việc thoát ra khỏi cái lồng đó.

Netscape Navigator 6, được 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 đơn giả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 không đồng bộ và XML, là một kỹ thuật được ra đời vào những năm 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 cho JavaScript cho trình duyệt Internet Explorer 5 của mình. Một trong số đó là hàm XMLHttpRequest (ở 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 một 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 áp 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 .

XMLHttpRequest được chứng minh 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 biệt của nó (như một phần của nhóm WHATWG và W3C).

Sự phát triển này của các tính năng, một người 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 đó, thông tin liên lạc giữa các bên ít hơn nhiều, 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 thủ tục 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, việc cố gắng truy cập Google trong phiên bản này dẫn đến một trang đang hoạt động, có thể xem được, ngay cả ngày hôm 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 sự cố thiếu ngoại lệ, hiển thị không đầy đủ và bố cục xấu. Mọi thứ diễn ra rất nhanh đối với web, kể cả hồi đó.

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 là có nhiều điểm khác biệt trong việc triển khai các 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à nguồn gốc 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 vào XMLHttpRequest đối tượng 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.

  

var

xhr

=

new

ActiveXObject

(

< p class = "chuỗi mã thông báo"> "Microsoft.XMLHTTP"

)

;

< / pre>

Có thể cho rằng, chính Internet Explorer 5 là người đưa ý tưởng này lên bàn thảo luậ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 phiên bản cũ của Internet Explorer để chạy chính xác.

ECMAScript 3.1 và 4: The Nhiều năm đấu tranh

Thật không may, những năm sau đó không tốt cho sự phát triển của JavaScript. Ngay sau khi công việc trên ECMAScript 4 bắt đầu, sự khác biệt mạnh mẽ 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 một 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 và sự thay đổi lớn. Những người khác cho rằng đây không phải là khóa học thích hợp cho JavaScript. Sự thiếu đồ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.

Làm 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à công việc trên phiên bản mới của ECMAScript đã 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 động cơ của họ. Vào năm 2005, tác động của AJAX và XMLHttpRequest lại làm dấy lên sự quan tâm đến phiên bản JavaScript mới và TC-39 được tiếp tục hoạt động. Nhiều năm trôi qua và tập hợp các tính năng ngày càng lớn hơn. Ở đỉnh cao của sự phát triển, ECMAScript 4 có các tính năng như:

  • Lớp
  • Giao diện
  • Không gian tên
  • Gói
  • Chú thích kiểu tùy chọn
  • Kiểm tra kiểu tĩnh tùy chọn
  • Kiểu cấu trúc
  • Định nghĩa kiểu
  • Đa phương pháp
  • < li> Các kiểu được tham số hóa
  • Các lệnh gọi đuôi thích hợp
  • Trình lặp
  • Trình tạo
  • Phân tích đối tượng
  • Nhập các trình xử lý ngoại lệ phân biệt đối xử < / li>
  • Liên kết không đổi
  • Phạm vi khối phù hợp
  • Cấu trúc lại
  • Biểu thức hàm phân tích
  • Hiểu mảng
  • < / ul>

    Bản nháp của ECMAScript 4 mô tả phiên bản mới này là dành cho lập trình nói chung. 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 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 ngày càng 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 như một ngôn ngữ mở rộng và kịch bản 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 móc tối ưu hóa khác, và 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. - Bản nháp ECMAScript 4

    Một phần lịch sử thú vị là mục tiêu Bảng tính Google Tài liệu , 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 đến việc đó.

    Ủy ban đang phát triển ECMAScript 4 được thành lập bởi Adobe, Mozilla, Opera (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ó ảnh hưởng, là người được Yahoo gửi đến cho việc này. Anh ấy đã bày tỏ mối quan ngại của mình khi phản đối mạnh mẽ nhiều thay đổi được đề xuất cho ECMAScript 4. Anh ấy đã nhận được sự ủng hộ mạnh mẽ từ đại diện của Microsoft. Theo lời của chính Crockford:

    Nhưng hóa ra thành viên của Microsoft cũng có những lo lắng tương tự - anh ta cũng cho 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 gia nhập nhóm bởi vì anh ấy lo ngại rằng, nếu Microsoft cố gắng cản trở điều này, nó sẽ bị cáo buộc là hành vi chống cạnh tranh. Dựa trên hiệu suất trong quá khứ của Microsoft, có thể có một số lý do chính đáng để họ lo lắng 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à với công lao của mình, anh ấy đã quyết định rằng mình nên làm 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 - Trạng thái và tương lai của JavaScript

    Điều gì bắt đầu là nghi ngờ , nhanh chóng trở thành một 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 được phê duyệt (ngay 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 concensus đã ngăn cản ECMAScript 4 tiến triển một cách hiệu quả.

    Một số người tại Microsoft muốn chơi khó 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, bắt đầu các thủ tục khiếu nại, muốn làm những việc hợp pháp bổ sung này. Tôi không muốn bất kỳ phần nào trong số đó. Sự không đồng ý của tôi với ES4 là nghiêm ngặt về mặt kỹ thuật và tôi muốn giữ nó nghiêm ngặt về mặt kỹ thuật; Tôi không muốn làm cho nó tệ hơn nó phải có. Tôi chỉ muốn cố gắng tìm ra điều đúng đắn cần làm, vì vậy tôi đã cố gắng tiết chế nó một chút. Nhưng Microsoft vẫn có 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ứ trở nên phân cực, nhưng tôi nghĩ rằng 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ệ bởi vì một nhóm tiêu chuẩn cần được đồng thuận. Một tiêu chuẩn không có gì phải bàn cãi. - Douglas Crockford - Trạng thái và tương lai của JavaScript

    Crockford đã thúc đẩy ý tưởng về việc tạo ra một tập hợp các 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 thiết thực được sinh ra từ trải 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 thiết 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 cuộc đấu tranh ở ECMA, đã được hoàn thành.

    Kết thúc cho 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 trong Oslo trình bày chi tiết về con đường phía trước cho ECMAScript và tương lai của phiên bản 3.1 và 4.

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

    1. Tập trung công việc vào ES3.1 với sự cộng 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 ở 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ả sự đổi mới về ngữ nghĩa và cú pháp.
    3. Một số đề xuất ES4 được coi là không có lợi cho Web và không có lợi cho điều đó: gói, không gian tên và liên kết sớm. Kết luận này là chìa khóa cho Sự hài hòa.
    4. Các mục tiêu và ý tưởng khác từ ES4 đang được trình bày lại để duy trì sự đồng thuận trong ủy ban; chúng bao gồm khái niệm về các lớp dựa trên các khái niệm ES3 hiện có kết hợp với các phần mở rộng ES3.1 được đề xuất.

    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ó cho tất cả những ai có liên quan.

    Từ "Hài hòa" xuất hiện trong phần kết luận ở trên. Đây là tên mà dự án cho các tiện ích mở rộng trong tương lai cho JavaScript đã nhận được. Sự hài hòa sẽ là sự 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 mà tất cả các ý tưởng mới về JavaScript sẽ được thảo luận.

    ActionScript

    ActionScript là một 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ó quan điểm mạnh mẽ ủng hộ ECMAScript 4, thậm chí còn tiến xa hơn khi 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 có, chúng tôi sẽ đổi mới và thúc đẩy web về phía trước khi có thể (giống như chúng tôi đã làm trước đây). - Blog của Mike Chamber

    Đó là hy vọng của các nhà phát triển ActionScript 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ờ đúng như vậy và những gì sau này đến với ECMAScript 2015 theo nhiều cách không tương thích với ActionScript.

    Một số coi động thái này là 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 tại thời điểm này là Tamarin, vì vậy Microsoft, công ty chiếm 80% thị phần trình duyệt tại thời điểm này, có thể tiếp tục sử dụng công cụ (và các tiện ích mở rộng) của riêng mình mà không cần thanh toán chi phí chuyển sang giải pháp thay thế của đối thủ cạnh tranh hoặc dành thời gian để triển khai mọi thứ nội bộ . Những người khác chỉ đơn giản nói rằng sự 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 để duy trì quyền kiểm soát ngôn ngữ một cách bí mật.

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

    ActionScript vẫn là cái nhì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:

      

    package

    {

    nhập

    flash

    .

    display

    .

    Sprite

    ;

    public

    class

    MyRectangle_v3

    kéo dài

    Sprite

    {

    private

    var

    _outlineWeight

    :

    Số

    ;

    private

    var

    _color

    :

    uint

    ;

    private

    var

    _xLocation

    :

    int

    ;

    private

    var

    _yLocation

    :

    int

    ;

    private

    var

    _rectangleWidth

    :

    int

    ;

    private

    var

    _rectangleHeight

    :

    int

    ;

    public

    function

    MyRectangle_v3

    (

    outlineWeight

    :

    Số

    ,

    color

    :

    uint

    ,

    xLocation

    :

    int

    ,

    yLocation

    :

    int

    ,

    Hình chữ nhậtWidth

    :

    int

    ,

    hình chữ nhậtHeight

    :

    int

    )

    {

    _outlineWeight

    =

    outlineWeight

    ;

    _color

    =

    color

    ;

    _xLocation

    =

    xLocation

    ;

    _yLocation

    =

    yLocation

    ;

    _rectangleWidth

    =

    Chữ nhậtWidth

    ;

    _rectangleHeight

    =

    khung hình chữ nhậtHeight

    ;

    }

    public

    chức năng

    draw

    (

    )

    :

    void

    {

    đồ họa

    .

    lineStyle

    (

    _outlineWeight

    )

    ;

    đồ họa

    .

    beginFill

    (

    _color

    )

    ;

    đồ họa

    .

    drawRect

    (

    _xLocation

    ,

    _yLocation

    ,

    _rectangleWidth

    ,

    _rectangleHeight

    ) < / p>

    ;

    đồ họa

    .

    endFill

    (

    )

    ;

    }

    }

    }

    E4X? E4X là gì?

    E4X là tên mà một phần 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 thông qua. Tên thực 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 như một 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, chấp nhận ban đầu, nhưng sau đó đã 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 rất nhiều đến ECMAScript 4.

    Một ví dụ về những gì E4X từng làm đưa lên bảng:

      

    var

    sales

    =

    & lt;

    nhà cung cấp bán hàng

    =

    "John"

    & gt;

    & lt;

    item type

    =

    "peas"

    price

    =

    "4"

    số lượng

    =

    " 6 "

    /

    & gt;

    & lt;

    item type

    =

    "cà rốt"

    price

    =

    "3"

    số lượng

    =

    " 10 "

    /

    & gt;

    & lt;

    item type

    =

    "chip"

    price

    =

    "5"

    số lượng

    =

    " 3 "

    /

    & gt;

    & lt;

    /

    bán hàng

    & gt;

    ;

    cảnh báo

    (

    doanh thu

    .

    item

    .

    (

    @type

    ==

    " củ cà rốt "

    )

    .

    @quantity

    )

    < p class = "dấu chấm câu mã thông báo">;

    alert

    (

    doanh số

    .

    @vendor

    )

    ;

    cho

    mỗi

    (

    var

    price

    trong bán hàng

    . dấu chấm câu token ">.

    @price

    )

    {

    cảnh báo

    (

    price

    )

    ;

    }

    xóa

    bán

    .

    item

    [

    0

    ]

    ;

    bán hàng

    .

    item

    + =

    & lt;

    loại mặt hàng

    =

    "cam"

    price

    =

    "4"

    /

    & gt;

    ; < / p> bán hàng

    .

    item

    .

    (

    @type

    ==

    "cam"

    )

    .

    @quantity

    =

    4

    ;

    < / code>

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

    ECMAScript 5: The Rebirth Of JavaScript

    Sau cuộc đấu tranh lâu dài của 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à được ký kết bởi tất cả các bên liên quan. ECMAScript 3.1 đã đượ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 thành ECMAScript 5 để tránh nhầm lẫn 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ợ đầy đủ bởi Firefox 4 (2011), Chrome 19 (2012), Safari 6 (2012), Opera 12.10 (2012) và Internet Explorer 10 (2012). Bản cập nhật lên ECMAScript 3, bao gồm:

    • Getter / setters
    • Dấu phẩy theo sau trong mảng và ký tự đối tượng
    • Các từ dành riêng làm tên thuộc tính>
    • Tạo mới Phương thức đối tượng ( create , defineProperty , , , >, getOwnPropertyNames , v.v.)
    • Các phương thức Array mới ( isArray , , every , some , , , redu ce , v.v.)
    • Chuỗi

      .

      nguyên mẫu

      .

      trim và quyền truy cập thuộc tính

    • Mới Ngày code> các phương thức ( toISOString , now , toJSON )
    • Hàm bind
    • JSON
    • Đối tượng toàn cục bất biến (

      undefined

      ,

      NaN

      ,

      Infinity

      )

    • Chế độ nghiêm ngặt
    • Các thay đổi nhỏ khác ( parseInt bỏ qua các số 0 ở đầu, các hàm thown có các giá trị

      this

      thích hợp, v.v.)

    Không có thay đổi nào bắt buộc phải thay đổi cú pháp. Getters và setters đã được hỗ trợ không chính thức bởi các trình duyệt khác nhau vào thời điểm đó. Các phương thức Object mới cải thiện "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 một số bất biến nhất định được thực thi ( Object.seal , Object.freeze , Object.createProperty ). Chế độ nghiêm ngặt cũng trở thành một công cụ mạnh mẽ trong lĩnh vực này bằng cách ngăn chặn nhiều nguồn lỗi phổ biến. Mảng bổ sungCác phương pháp cải thiện các mẫu chức năng nhất định ( map , giảm , filter , every , some ). Thay đổi lớn khác là JSON: một định dạng dữ liệu lấy cảm hứng từ JavaScript hiện được hỗ trợ nguyên bản thông qua JSON.stringify JSON.parse . Những thay đổi khác tạo ra những cải tiến nhỏ trong một số lĩnh vực dựa trên kinh nghiệm thực tế. Nhìn chung, ECMAScript 5 là một cải tiến khiêm tốn giúp JavaScript trở thành một ngôn ngữ dễ sử dụng hơn, cho cả các tập lệnh nhỏ và các dự án lớn hơn. Tuy nhiên, có rất nhiều ý tưởng hay từ ECMAScript 4 đã bị loại bỏ và sẽ thấy sự trở lại thông qua đề xuất ECMAScript Harmony.

    ECMAScript 5 đã có một lần lặp lại nữa trong năm 2011 dưới dạng ECMAScript 5.1. Bản phát hành này đã làm rõ một số điểm không rõ ràng trong tiêu chuẩn nhưng không cung cấp bất kỳ tính năng mới nào. Tất cả các tính năng mới đã được dự kiến ​​cho bản phát hành lớn tiếp theo của ECMAScript.

    ECMAScript 6 (2015) & amp; 7 (2016): Ngôn ngữ Mục đích Chung

    Đề xuất ECMAScript Harmony đã trở thành trung tâm cho những cải tiến trong tương lai đối với JavaScript. Nhiều ý tưởng từ ECMAScript 4 đã bị hủy bỏ vì lý do tốt, nhưng những ý tưởng khác đã được phát triển lại với một tư duy mới. ECMAScript 6, sau đó được đổi tên thành ECMAScript 2015, được dự kiến ​​sẽ mang lại những thay đổi lớn. Hầu hết mọi thay đổi yêu cầu thay đổi cú pháp đã được đẩy trở lại phiên bản này. Tuy nhiên, lần này, ủy ban đã đạt được sự thống nhất và ECMAScript 6 cuối cùng đã được phát hành vào năm 2015. Nhiều nhà cung cấp trình duyệt đã làm việc để triển khai các tính năng của nó, nhưng với một thay đổi lớn, mọi thứ đã mất một thời gian. Ngay cả ngày nay, không phải tất cả các trình duyệt đều có phạm vi áp dụng đầy đủ của ECMAScript 2015 (mặc dù chúng đang ở rất gần).

    Việc phát hành ECMAScript 2015 đã gây ra một bước nhảy vọt trong việc sử dụng các bộ chuyển mã như Babel hoặc Traceur. Ngay cả trước khi phát hành, khi những bộ chuyển mã này theo dõi tiến trình của ủy ban kỹ thuật, mọi người đã trải nghiệm nhiều lợi ích của ECMAScript 2015.

    Một số tính năng lớn của ECMAScript 4 đã được triển khai trong phiên bản ECMAScript này . Tuy nhiên, chúng đã được thực hiện với một tư duy khác. Ví dụ, các lớp trong ECMAScript 2015 chỉ hơn một chút đường cú pháp trên đầu các nguyên mẫu. Tư duy này giúp giảm bớt quá trình chuyển đổi và phát triển các tính năng mới.

    Chúng tôi đã tìm hiểu tổng quan sâu rộng về các tính năng mới của ECMAScript 2015 trong Bản tóm tắt của Bài viết về các tính năng của JavaScript 2015 . Bạn cũng có thể xem qua bảng khả năng tương thích của ECMAScript để biết chúng tôi hiện đang đứng về phương diện triển khai.

    Tóm tắt ngắn gọn về các tính năng mới sau:

    • Cho phép (từ vựng) và const (không thể thay đổi) liên kết
    • Hàm mũi tên (hàm ẩn danh ngắn hơn) và từ vựng này (phạm vi bao quanh this)
    • Các lớp (tổng hợp cú pháp ở trên các nguyên mẫu)
    • Các cải tiến về nghĩa đen của đối tượng (các khóa được tính toán, các định nghĩa phương thức ngắn hơn, v.v.)
    • Các chuỗi mẫu
    • Lời hứa
    • Trình tạo, tệp lặp, trình lặp và

      cho dấu chấm câu mã thông báo

      .

      .

      của

    • Các đối số mặc định cho các hàm và toán tử còn lại
    • Cú pháp mở rộng
    • Cấu trúc lại
    • Cú pháp mô-đun
    • Bộ sưu tập mới (Set, Map, WeakSet, WeakMap)
    • Proxy và Reflection
    • < li> Ký hiệu

    • ar đã nhập tia
    • Hỗ trợ tích hợp sẵn phân lớp
    • Tối ưu hóa cuộc gọi đuôi được đảm bảo
    • Hỗ trợ Unicode đơn giản hơn
    • Các ký tự nhị phân và bát phân

    Các lớp, let, const, hứa hẹn, trình tạo, trình vòng lặp, mô-đun, v.v. Đây là tất cả các tính năng nhằm đưa JavaScript đến với nhiều đối tượng hơn và hỗ trợ lập trình nói chung.

    Có thể ngạc nhiên khi rất nhiều tính năng có thể vượt qua quá trình chuẩn hóa khi ECMAScript 4 không thành công. Theo nghĩa này, điều quan trọng cần lưu ý là nhiều tính năng xâm lấn nhất của ECMAScript 4 đã không được xem xét lại (không gian tên, cách nhập tùy chọn), trong khi những tính năng khác đã được suy nghĩ lại theo cách họ có thể vượt qua những phản đối trước đó (tạo các lớp cú pháp trên đầu trang nguyên mẫu). Tuy nhiên, ECMAScript 2015 là một từ khó và mất gần 6 năm để hoàn thành (và hơn thế nữa để thực hiện đầy đủ). Tuy nhiên, việc ủy ​​ban kỹ thuật ECMAScript có thể hoàn thành một nhiệm vụ gian khổ như vậy được xem là một dấu hiệu tốt cho những điều sắp tới.

    Một bản sửa đổi nhỏ cho ECMAScript đã được phát hành vào năm 2016. Bản sửa đổi nhỏ này là kết quả của quá trình phát hành mới do TC-39 thực hiện. Tất cả các đề xuất mới phải trải qua một quy trình bốn giai đoạn. Mọi đề xuất đạt đến giai đoạn 4 đều có cơ hội được đưa vào phiên bản tiếp theo của ECMAScript (mặc dù ủy ban vẫn có thể chọn đẩy lùi việc đưa vào). Bằng cách này, các đề xuất được phát triển gần như tự chúng (mặc dù phải tính đến sự tương tác với các đề xuất khác). Các đề xuất không ngăn cản sự phát triển của ECMAScript. Nếu một đề xuất đã sẵn sàng để đưa vào và đủ đề xuất đã đạt đến giai đoạn 4, một phiên bản ECMAScript mới có thể được phát hành.

    Phiên bản được phát hành vào năm 2016 là một phiên bản khá nhỏ. Nó bao gồm:

    • Toán tử lũy thừa (

      **

      )

    • Mảng

      .

      nguyên mẫu

      .

      bao gồm

    • Một vài chỉnh sửa nhỏ (không thể sử dụng trình tạo với trình tạo mới, v.v.)

    Tuy nhiên , một số đề xuất thú vị nhất định đã đạt đến giai đoạn 4 vào năm 2016, vậy điều gì đang chờ đợi phía trước đối với ECMAScript?

    The Future and Beyond : ECMAScipt 2017 trở lên

    Có lẽ đề xuất giai đoạn 4 quan trọng nhất hiện đang được thực hiện là async / await . Async / await là một phần mở rộng cú pháp cho JavaScript giúp làm việc với các hứa hẹn dễ chịu hơn nhiều. Ví dụ: lấy mã ECMAScript 2015 sau:

      

    function

    apiDoSomethingMoreComplex

    (

    withThis

    )

    {

    const

    urlA

    =

    '...'

    ;

    const

    urlB

    =

    '...'

    ;

    httpLib

    .

    yêu cầu

    (

    urlA

    ,

    withThis

    )

    .

    rồi

    (

    kết quả

    = & gt;

    {

    const

    đã phân tích cú pháp

    =

    parseResult

    (

    kết quả

    )

    ;

    return

    new

    Lời hứa

    (

    (

    giải quyết

    ,

    từ chối

    )

    = & gt;

    {

    cơ sở dữ liệu

    .

    cập nhật

    (

    updateStatement

    ,

    được phân tích cú pháp

    )

    .

    rồi

    (

    (

    )

    = & gt;

    {

    giải quyết

    (

    đã phân tích cú pháp

    )

    ;

    }

    ,

    lỗi

    = & gt;

    {

    từ chối

    (

    lỗi

    )

    ;

    }

    )

    ;

    }

    )

    ;

    }

    )

    .

    sau đó

    (

    kết quả

    = & gt;

    {

    return

    httpLib

    .

    yêu cầu

    (

    urlB

    ,

    kết quả

    )

    ;

    }

    )

    .

    sau đó

    (

    kết quả

    = & gt;

    {

    return worker

    processData

    "> (

    kết quả

    )

    ;

    }

    )

    .

    sau đó

    (

    kết quả

    = & gt;

    {

    người ghi

    .

    thông tin

    (

    `

    apiDoSomethingMoreComplex thành công (

    $ {

    result

    }

    )

    `

    )

    ; < / p>

    }

    ,

    lỗi

    = & gt;

    {

    người ghi

    .

    lỗi

    (

    lỗi

    )

    ;

    }

    )

    ;

    }

    Và so sánh nó với mã được bật async / await sau :

      

    async

    function

    apiDoSomethingMoreComplex

    (

    withThis

    ) p>

    {

    const

    urlA

    =

    '...'

    ;

    const

    urlB

    =

    '...'

    ;

    thử

    {

    let

    result

    =

    chấp nhận

    httpLib

    .

    yêu cầu

    (

    urlA

    , > withThis

    )

    ;

    const

    đã phân tích cú pháp

    =

    parseResult

    (

    kết quả

    )

    ;

    chấp nhận

    cơ sở dữ liệu

    "> (

    updateStatement

    ,

    đã phân tích cú pháp

    )

    ;

    > kết quả

    =

    nhận

    httpLib

    .

    yêu cầu

    (

    urlB

    ,

    được phân tích cú pháp

    )

    ;

    kết quả

    =

    nhận

    worker

    .

    processData

    (

    kết quả

    )

    ; > người ghi

    .

    thông tin

    (

    `

    apiDoSomethingMoreComplex thành công (

    $ {

    result

    }

    )

    `

    )

    ; < / p>

    }

    bắt

    (

    e

    )

    {

    người ghi

    .

    lỗi

    (

    e

    )

    ;

    }

    }

    Các đề xuất giai đoạn 4 khác có phạm vi nhỏ:

    • Đối tượng

      .

      giá trị Đối tượng

      .

      mục nhập

    • Phần đệm chuỗi
    • Đối tượng

      .

      getOwnPropertyDescriptors

    • Dấu phẩy ở cuối nếu các tham số chức năng

    Tất cả các đề xuất này đều được dự kiến ​​phát hành vào năm 2017, tuy nhiên, ủy ban có thể chọn lùi chúng lại theo quyết định của họ. Tuy nhiên, chỉ cần có async / await sẽ là một sự thay đổi thú vị.

    Nhưng tương lai không kết thúc ở đó! Chúng ta có thể xem xét một số đề xuất khác để biết những gì còn ở phía trước. Một số điều thú vị là:

    • API SIMD
    • Lặp lại không đồng bộ (async / await + iteration)
    • Các hàm mũi tên của trình tạo
    • Phép toán số nguyên 64-bit
    • Cõi (phân tách / cô lập trạng thái)
    • Bộ nhớ dùng chung và nguyên tử

    JavaScript ngày càng giống một tổng thể ngôn ngữ mục đích. Nhưng có một điều lớn nữa trong tương lai của JavaScript sẽ tạo ra sự khác biệt lớn.

    WebAssembly

    Nếu bạn chưa nghe nói về WebAssembly, bạn nên đọc về nó . Sự bùng nổ của các thư viện, khuôn khổ và sự phát triển chung được khơi dậy kể từ khi ECMAScript 5 được phát hành đã khiến JavaScript trở thành một mục tiêu thú vị cho các ngôn ngữ khác. Đối với các cơ sở mã lớn, khả năng tương tác là chìa khóa. Ví dụ như trò chơi. Ngôn ngữ để phát triển trò chơi vẫn là C ++, và nó có thể di chuyển được đối với nhiều kiến ​​trúc. Việc chuyển một trò chơi Windows hoặc bảng điều khiển vào trình duyệt được coi là một nhiệm vụ không thể vượt qua. Tuy nhiên, hiệu suất đáng kinh ngạc của các máy ảo JIT JavaScript hiện tại đã làm cho điều này trở nên khả thi. Vì vậy, những thứ như Emscripten , một trình biên dịch LLVM sang JavaScript, đã ra đời.

    Mozilla đã nhìn thấy điều này và bắt đầu làm việc để tạo JavaScript một mục tiêu thích hợp cho các trình biên dịch. Asm.js ra đời. Asm.js là một tập hợp con JavaScript lý tưởng làm mục tiêu cho các trình biên dịch. Máy ảo JavaScript có thể được tối ưu hóa để nhận ra tập hợp con này và tạo ra mã thậm chí tốt hơn so với mã JavaScript bình thường hiện có. Trình duyệt đang dần trở thành mục tiêu hoàn toàn mới để biên dịch ứng dụng và JavaScript là trung tâm của nó.

    Tuy nhiên, có một số hạn chế nhất định mà ngay cả Asm.js cũng không thể giải quyết được. Cần thực hiện các thay đổi đối với JavaScript không liên quan đến mục đích của nó. Để làm cho web trở thành mục tiêu thích hợp cho các ngôn ngữ khác, cần phải có một thứ gì đó khác biệt và đó chính xác là WebAssembly. WebAssembly là một mã bytecode dành cho web. Bất kỳ chương trình nào có trình biên dịch phù hợp đều có thể được biên dịch sang WebAssembly và chạy trên một máy ảo phù hợp (máy ảo JavaScript có thể cung cấp ngữ nghĩa cần thiết). Trên thực tế, các phiên bản đầu tiên của WebAssembly hướng đến khả năng tương thích 1-1 với đặc tả Asm.js. WebAssembly không chỉ hứa hẹn về thời gian tải nhanh hơn (mã bytecode có thể được phân tích cú pháp nhanh hơn văn bản), mà còn có thể tối ưu hóa hiện không có sẵn trong Asm.js. Hãy tưởng tượng một web có khả năng tương tác hoàn hảo giữa JavaScript và mã hiện có của bạn.

    Thoạt nhìn, điều này có vẻ làm ảnh hưởng đến sự phát triển của JavaScript, nhưng thực tế thì hoàn toàn ngược lại. Bằng cách giúp các ngôn ngữ và khuôn khổ khác có thể tương tác với JavaScript dễ dàng hơn, JavaScript có thể tiếp tục phát triển như một ngôn ngữ có mục đích chung. Và WebAssembly là công cụ cần thiết cho điều đó.

    Hiện tại, các phiên bản phát triển của Chrome, Firefox và Microsoft Edge đều hỗ trợ bản nháp đặc tả của WebAssembly và có khả năng chạy mục tiêu ứng dụng demo .

    Ngoài ra: Sử dụng JavaScript tại Auth0

    Tại Auth0, chúng tôi người dùng nhiều JavaScript . Từ Khóa thư viện đến chương trình phụ trợ của chúng tôi, JavaScript cung cấp sức mạnh cho cốt lõi hoạt động của chúng tôi. Chúng tôi nhận thấy bản chất không đồng bộ của nó và rào cản gia nhập thấp đối với các nhà phát triển mới là điều cần thiết cho sự thành công của chúng tôi. Chúng tôi rất háo hức xem ngôn ngữ đang hướng đến đâu và tác động của ngôn ngữ đó trong hệ sinh thái của nó.

    Đăng ký tài khoản Auth0 miễn phí < p> và tận mắt chứng kiến ​​một hệ sinh thái sẵn sàng sản xuất được viết bằng JavaScript. Và đừng lo lắng, chúng tôi có thư viện ứng dụng khách cho tất cả các khuôn khổ và nền tảng phổ biến !

    Auth0 cung cấp bậc miễn phí hào phóng để bắt đầu với xác thực hiện đại.

    Gần đây , chúng tôi đã phát hành một sản phẩm có tên Phần mở rộng Auth0 . Sản phẩm này cho phép các công ty cung cấp cho khách hàng của họ một điểm mở rộng dễ sử dụng chấp nhận mã JavaScript. Với Auth0 Extend , khách hàng có thể tạo các quy tắc kinh doanh tùy chỉnh, công việc đã lên lịch hoặc kết nối với hệ sinh thái bằng cách tích hợp với các hệ thống SaaS khác, như Marketo, Salesforce và Đồng tình. Tất cả đều sử dụng mô-đun JavaScript và NPM thuần túy.

    Kết luận

    Lịch sử của JavaScript đã lâu và đầy rẫy những khúc mắc. Nó được đề xuất như một "Đề án cho web". Ngay từ đầu, nó đã có cú pháp giống Java. Nguyên mẫu đầu tiên của nó đã được phát triển trong vài tuần. Nó phải chịu những rủi ro về tiếp thị và có ba cái tên trong vòng chưa đầy hai năm. Sau đó, nó được tiêu chuẩn hóa và có tên giống như bệnh da . Sau ba lần phát hành thành công, phần thứ tư bị cuốn vào địa ngục phát triển trong gần 8 năm. Ngón tay đã được chỉ xung quanh. Sau đó, nhờ sự thành công tuyệt đối của một tính năng duy nhất (AJAX), cộng đồng đã cùng nhau hành động trở lại và quá trình phát triển được tiếp tục. Phiên bản 4 đã bị loại bỏ và một bản sửa đổi nhỏ, được mọi người gọi là phiên bản 3.1, được đổi tên thành phiên bản 5. Phiên bản 6 đã trải qua nhiều năm phát triển (một lần nữa) nhưng lần này ủy ban đã thành công, nhưng vẫn quyết định đổi tên một lần nữa, lần này đến năm 2015. Bản sửa đổi này rất lớn và mất nhiều thời gian để thực hiện. Nhưng cuối cùng, không khí mới đã được thổi vào JavaScript. Cộng đồng vẫn hoạt động tích cực hơn bao giờ hết. Node.js, V8 và các dự án khác đã đưa JavaScript đến những nơi mà nó chưa từng nghĩ tới. Asm.js, WebAssembly sắp phát triển hơn nữa. Và các đề xuất tích cực trong các giai đoạn khác nhau đều đang làm cho tương lai của JavaScript trở nên tươi sáng hơn bao giờ hết. Đó là một chặng đường dài, đầy chông gai và JavaScript vẫn là một trong những ngôn ngữ thành công nhất từ ​​trước đến nay. Đó là một minh chứng cho chính nó. Luôn đặt cược vào JavaScript.


Xem thêm những thông tin liên quan đến chủ đề javascript được phát minh khi nào

A Brief History of JavaScript by the Creator of JavaScript

  • Tác giả: Coding Tech
  • Ngày đăng: 2018-04-13
  • Đánh giá: 4 ⭐ ( 4709 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: For his 3rd dotJS appearance, Brendan give us insights into the process of standardisation of JavaScript at TC39, then covers some of the features of ES Next, and reminds us once again why we should always bet on JS.

    EVENT:

    dotJS 2017

    SPEAKER:

    Brendan Eich

    PERMISSIONS:

    dotConference Organizer provided Coding Tech with the permission to republish this video.

    CREDITS:

    dotJS: https://www.dotconferences.com/2017/12/brendan-eich-a-brief-history-of-javascript

    Additional material for JavaScript learners:
    https://amzn.to/2JrUINQ Eloquent JavaScript, 3rd Edition: A Modern Introduction to Programming
    https://amzn.to/2HwAMYd Simplifying JavaScript: Writing Modern JavaScript with ES5, ES6, and Beyond
    https://amzn.to/2Cq5bmL JavaScript: JavaScript Programming.A Step-by-Step Guide for Absolute Beginners
    https://amzn.to/2uhIvAP How JavaScript Works
    https://amzn.to/2CwS2bU The Modern JavaScript Collection

JavaScript là gì? Kiến thức cơ bản về ngôn ngữ lập trình JS

  • Tác giả: bizflycloud.vn
  • Đánh giá: 5 ⭐ ( 3275 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Javascript là một ngôn ngữ lập trình thông dịch được sử dụng ở phía máy khách và phía máy chủ, cho phép tạo các trang web có các hình động chuyên nghiệp

Học JavaScript:Tìm hiểu JavaScript là gì & JavaScript dùng để làm gì

  • Tác giả: vn.bitdegree.org
  • Đánh giá: 3 ⭐ ( 9450 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bạn không biết JavaScript dùng để làm gì? Theo dõi hướng dẫn học JavaScript này để tìm hiểu và xem xét học JavaScript như thế nào cho phù hợp

JavaScript là gì? Lịch sử phát triển và cách hoạt động của javascript

  • Tác giả: nq.com.vn
  • Đánh giá: 5 ⭐ ( 3284 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Node.js và những điều có thể bạn chưa biết

  • Tác giả: topdev.vn
  • Đánh giá: 3 ⭐ ( 1425 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: NodeJS là một nền tảng được xây dựng trên "V8 Javascript engine" được viết bằng c++ và Javascript. Nền tảng này được phát triển bởi Ryan Lienhart Dahl vào năm 2009. Node.js ra đời khi các developer đời đầu của JavaScript mở rộng nó từ một thứ bạn chỉ chạy được trên trình duyệt thành một thứ bạn có thể chạy trên máy của mình dưới dạng ứng dụng độc lập.

Lịch sử phát triển JavaScript - Minh Hoàng Blog

  • Tác giả: minhhn.com
  • Đánh giá: 4 ⭐ ( 4685 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Javascript là gì? Tổng quan về JavaScript bạn cần biết

  • Tác giả: newnet.vn
  • Đánh giá: 3 ⭐ ( 5357 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Tìm hiểu tổng quan về JavaScript, JavaScript là gì? JavaScript có vai trò gì trong thiết kế website? Sử dụng JavaScript thì có những ưu điểm nào vượt trội không? Hãy cùng Newnet tìm hiểu nhé!

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Cách loại bỏ, thay thế hoặc tạo kiểu cho các dấu đầu dòng bằng CSS thuần túy - cách xóa dấu đầu dòng trong css

By ads_php