JavaScript thực sự là gì?


95

Tất cả điều này bắt đầu khi tôi đang tìm cách kiểm tra trang web của mình về sự phù hợp với JavaScript như Trình xác thực HTML W3C . Tôi chưa tìm thấy cái nào cả. Vì vậy, hãy cho tôi biết nếu bạn biết về bất kỳ ...

  1. Tôi đã tìm trang JavaScript chính thức và tìm ECMA Script . Những người này đã chuẩn hóa một ngôn ngữ kịch bản (tôi không cảm thấy muốn gọi nó là JavaScript nữa!) Và gọi nó là ECMA-262 ( Wikipedia ). Tác phẩm mới nhất của họ là Phiên bản 5.1

  2. JavaScript được phát triển bởi Mozilla Corporation và phiên bản ổn định cuối cùng của họ là 1.8.5 ( xem phần này ) dựa trên phiên bản 5.1 của ECMA

  3. Các trang Wikipedia liên kết đề cập đến phương ngữ. JavaScript 1.8.5 của Mozilla được liệt kê dưới dạng phương ngữ cùng với JScript 9 (IE) và JavaScript ( V8 của V8 [ Wiki ]) và rất nhiều thứ khác. Tôi có hiểu rằng JavaScript 1.8.5 là một dẫn xuất của ECMA-262 và SpiderMonkey [ Wiki ] là một công cụ chạy nó không? Và Chrome có phương ngữ riêng và động cơ V8 là chương trình chạy nó?

Với tất cả các phương ngữ dựa trên ECMA-262, điều tôi không còn có thể hiểu là " JavaScript là gì "? Có bất kỳ ngôn ngữ kịch bản trình duyệt thực sự chéo? Các nhà triển khai khác nhau có đồng ý với nhau về tính tương thích chéo của phương ngữ không? Đây có phải là nỗ lực ECMA?


10
Bạn đã quên đề cập đến ActionScript, đây là một phương ngữ ECMA không liên quan gì đến những gì bạn có thể gọi là Javascript.
DaveRandom

4
Không quá nhiều cho sự phù hợp (như bạn đã nhấn mạnh), nhưng jslint khá đẹp để kiểm tra mã.
Một số chú mèo

2
@MadaraUchiha - Tôi đồng ý "chỉ cần sử dụng jQuery. Mọi thứ sẽ ổn thôi." sẽ không ổn Đó là lý do tại sao tôi bắt đầu nghiên cứu điều này. Trang web của tôi bharath.lohray.com hoạt động tốt trên Chrome và Firefox và trình xác thực W3C cũng không tạo ra bất kỳ lỗi nào, nhưng nó hút thời gian lớn trên IE mới nhất! Hơn nữa, nhiều như tôi thích ý tưởng của mọi người tại anybrowser.org/campaign , tôi không thể thực sự là một trình duyệt chéo!
Chúa ơi.

7
Về trang của bạn, việc cuộn rất khó chịu và trên đầu trang. Chỉ cần IMO. Và danh hiệu "Chúa" nghe có vẻ hào hoa như địa ngục, ngay cả khi bạn thực sự là một Chúa.
NullUserException

11
Đó là hào nhoáng không cần thiết. Bạn không thấy các bài viết trượt lên xuống trên SE. Nếu đó có nghĩa là một trang web chuyên nghiệp và bạn vẫn muốn chuyển đổi, hãy sử dụng một cái gì đó kín đáo hơn như mờ dần / mờ dần.
NullUserException

Câu trả lời:


96

Khá nhiều tất cả các ngôn ngữ trưởng thành được xác định bởi một đặc tả và các trình biên dịch hoặc trình thông dịch cố gắng tuân theo tiêu chuẩn được xác định trong đặc tả đó. Nhưng rất hiếm khi họ thành công, trừ khi tiêu chuẩn được xác định bởi tác giả của ngôn ngữ.

Bạn có thể tìm thấy tiêu chuẩn C ++ 2003 , đặc tả C # 4 , đặc tả Java 7 và nhiều hơn nữa trực tuyến. Nhiều trong số này có số tiêu chuẩn hóa ECMA hoặc ISO. Đây chỉ là các tổ chức mà bạn có thể đăng ký một tiêu chuẩn và làm cho nó chính thức hơn.

Ruby trong lịch sử đã làm mọi thứ khác đi một chút, có một bộ kiểm tra thực thi như một đặc điểm kỹ thuật . Vì vậy, nếu bạn muốn viết một trình thông dịch và gọi nó là Ruby tiêu chuẩn, bạn chỉ cần tạo một trình thông dịch vượt qua tất cả các bài kiểm tra đó. Nhưng thậm chí Ruby có khả năng trở thành một đặc điểm kỹ thuật chính thức hơn cuối cùng.

Javascript không khác, ngoại trừ có thể theo cách nó đã phát triển.

Javascript lần đầu tiên được tạo bởi Netscape. Họ gọi nó là LiveScript, nhưng nó trông tương tự như Java và họ đã cắt giảm một thỏa thuận với Sun về cái tên, điều này mang lại lợi ích cho cả việc tiếp thị của Netscape và Java. Microsoft đã có VBScript và (vì lý do có lẽ bị mất để phỏng đoán) về cơ bản đã sao chép Javascript, nhưng tên này thuộc sở hữu của Sun, vì vậy họ đã táo tợn gọi nó là JScript.

Nhưng JScript, mặc dù rất giống với cú pháp Javascript, đã sử dụng rất nhiều COM - ví dụ, IE5 và 6 khởi tạo một đối tượng XMLHttpRequest bằng cách sử dụng new ActiveXObject("Microsoft.XMLHTTP");.

Và như vậy, "phương ngữ" song song, tương tự nhưng cũng khác nhau của Javascript đã ra đời. Theo thời gian, các nhóm khác nhau sở hữu các trình duyệt có thị phần ít hơn IE đã cố gắng chuẩn hóa ngôn ngữ và trong nhiều năm Microsoft đã chống lại. Cho đến khi V8.

V8 đã nhanh. Nó thiết lập một tiêu chuẩn thị trường hoàn toàn mới. Nó làm cho mọi thứ khác trông nghèo nàn.

Và, thông qua các vụ kiện chống độc quyền khác nhau chống lại Microsoft, IE đã mất thị phần. Đột nhiên, Microsoft quan tâm đến việc hỗ trợ tiêu chuẩn hóa. Chúng tôi chưa ở đó, nhưng nó đang đi đúng hướng.

Trong khi đó, động cơ V8 là mã nguồn mở, cho phép mọi người bắt đầu nghĩ ra cách sử dụng mới cho một phân tích cú pháp Javascript nhanh, chẳng hạn như Node.js .

Nhưng, để trở lại câu hỏi của bạn: Javascript là gì? Đó là tên chung (và bản gốc) cho ECMAScript, một đặc điểm kỹ thuật cho ngôn ngữ nguyên mẫu thông thường, nhưng không dành riêng, được sử dụng để điều hướng và thao tác mô hình đối tượng miền trong một broswer.

ECMA-262 chỉ là định nghĩa tiêu chuẩn, giống như ECMA-334 là định nghĩa tiêu chuẩn cho C #. ECMAScript là tên duy nhất mà tất cả các bên quan tâm có thể đồng ý, từ năm 99, khi ECMA-262 được viết.


7
Nếu tôi có thể nâng cao câu trả lời của bạn hơn một lần, tôi sẽ làm như vậy :-) Điều này giúp làm cho một vài điều rõ ràng hơn. Sự tương tự trình biên dịch C làm cho tình huống trở nên dễ hiểu một chút :-) Ngoại trừ JavaScript không được biên dịch thành nhị phân và người dùng cuối sẽ thấy các tập lệnh không có chức năng gần như. Vậy tôi có hiểu rằng tôi không thể xây dựng một trang theo tiêu chuẩn và hy vọng nó sẽ hoạt động trên tất cả các trình duyệt không? (vẫn là từ hoạt động).
Chúa ơi.

1
@LordLoh. Đúng rồi. Nhưng bạn có thể cho phép các thư viện như jQuery và Prototype trừu tượng hóa sự khác biệt cho bạn.
pdr

Bài đăng này và nghiên cứu bắt đầu khi hoạt hình jQuery không hoạt động trên IE9 và tôi đã nói dối ý tưởng về chiến dịch anybrowser.org và hy vọng tôi có thể tuân thủ một tiêu chuẩn. HTML5 / CSS3 / JS. Mã kết thúc là lỗi trong nắp ca-pô của tôi.
Chúa ơi.

1
@LordLoh. Tôi không chắc chắn đó là lỗi của jQuery. Chỉ cần nhìn lướt qua sẽ xuất hiện các vấn đề với HTML của bạn (ví dụ như thiếu dấu ngoặc kép) và khi bạn giảm thiểu Javascript của mình như thế, có thể có kết quả kỳ lạ nếu bạn không chính xác. Tôi nhớ một vấn đề từ lâu khi tôi đã bỏ lỡ một dấu chấm phẩy và nó chỉ thất bại sau khi nén ở một trong những trình duyệt chính. jQuery khá ổn định và sẽ hoạt động tốt với IE9.
pdr

5
@LordLoh. console.log là vấn đề của bạn. Nó không hoạt động trừ khi bạn mở thanh công cụ dành cho nhà phát triển (và do đó tạo đối tượng "console").
pdr

23

Javascript là một triển khai ECMAScript thường được sử dụng. Đó là một tình huống rất giống với gia đình Scheme . Trong Đề án, bạn có một đặc điểm kỹ thuật chính thức cao. Phiên bản hiện tại là R6RS mặc dù R5RS là tiêu chuẩn được triển khai phổ biến hơn cho đến thời điểm này. Việc triển khai phân tán hơn so với ECMAScript do tuổi của Scheme và các triết lý chung.

Javascript hiện đang trở nên phổ biến phần lớn là do sự tăng trưởng bùng nổ về thị phần của cả Firefox của Firefox và Chrome của Google. Nó đã có được chỗ đứng ban đầu với Netscape Navigator, cuối cùng biến thành trình duyệt Mozilla và sau đó thành Firefox (và Iceweasel nếu bạn chạy với đám đông Scheme).

Bây giờ đây là nơi nó có một chút xí ngầu. Hầu hết hiệu suất của Javascript đến từ trình phân tích cú pháp và công cụ chạy nó. Đây là nơi khác biệt thực sự giữa các trình duyệt trở nên rõ ràng. Spidermonkey chạy Javascript khác với V8. Javascript vẫn có những điểm yếu như thiếu thư viện hoàn toàn phổ biến, mặc dù điều đó đang được thực hiện.

Vì vậy, nếu Javascript là C ++, thì ECMAScript sẽ là C ++ 11, với UNIX và G ++ là gần nhất với "tiêu chuẩn" trong khi C ++ cho .NET và Objective C ++ nằm xa hơn nhiều so với cách mà Actioncript thực hiện từ ECMAScript

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.