跳转到内容

JavaScript

本页使用了标题或全文手工转换
维基百科,自由的百科全书

这是本页的一个历史版本,由AppleJoyNeop留言 | 贡献2013年4月3日 (三) 10:06编辑。这可能和当前版本存在着巨大的差异。

JavaScript
编程范型Multi-paradigm脚本语言, 面向对象 (基于原型), 指令式, 函数式
設計者Brendan Eich
實作者网景通讯公司Mozilla基金会
发行时间1995
当前版本
  • ECMAScript 2024(2024年6月;穩定版本)[1]
  • ECMAScript 2025(2024年3月27日;預發佈版本)[2]
編輯維基數據鏈接
型態系統动态类型, weak, duck
網站www.ecma-international.org/publications-and-standards/standards/ecma-262/ 編輯維基數據鏈接
主要實作產品
KJS, Rhino, SpiderMonkey, V8, WebKit, Carakan, Chakra
受影响于
C, Java, Perl, Python, Scheme, Self
影響語言
ActionScript, CoffeeScript, Dart, JScript .NET, Objective-J, QML, TIScript,TypeScript
JavaScript
扩展名
.js
互联网媒体类型
application/javascript
text/javascript (obsolete)[4]
统一类型标识com.netscape.javascript-source[5]
格式类型脚本语言

JavaScript,也称ECMAScript[6],是一種廣泛用於客户端网页开发腳本語言,最早是在HTML上使用的,用来给HTML网页添加动态功能,然而现在JavaScript也可被用于网络服务器,如Node.js

发展初期,JavaScript的标准并未确定,同期有网景的JavaScript,微软的JScript和CEnvi的ScriptEase三足鼎立。1997年,在ECMA(欧洲计算机制造商协会)的协调下,由Netscape、Sun、微软、Borland组成的工作组确定统一标准:ECMA-262。

一般来说,完整的JavaScript包括以下几个部分:

  • ECMAScript,描述了该语言的语法和基本对象
  • 文档对象模型(DOM),描述处理网页内容的方法和接口
  • 浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口

它的基本特点如下:

  • 是一种解释性脚本语言(代码不进行预编译)。
  • 主要用来向 HTML 页面添加交互行为
  • 通常直接嵌入 HTML 页面。

JavaScript常用来完成以下任务:

  • 嵌入动态文本于HTML页面
  • 对浏览器事件作出响应
  • 读写HTML元素
  • 在数据被提交到服务器之前验证数据
  • 检测访客的浏览器信息
  • 控制cookies,包括创建和修改等

历史

它最初由网景公司Brendan Eich设计,是一种动态、弱类型、基于原型的语言,内置支持類別。JavaScript是甲骨文公司的注册商标。[7] Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript文档对象模型浏览器对象模型

Netscape在最初將其腳本語言命名為LiveScript,後來Netscape在與Sun合作之後將其改名為JavaScript。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”[8],因此语法上有类似之处,一些名称和命名规范也借自Java。但JavaScript的主要设计原则源自SelfScheme[9]。JavaScript与Java名称上的近似,是当时网景为了营销考虑与太陽電腦达成协议的结果。為了取得技術優勢,微軟推出了JScript來迎戰JavaScript的腳本語言。为了互用性,Ecma国际(前身为欧洲计算机制造商协会)建立了ECMA-262标准(ECMAScript)。现在两者都属于ECMAScript的实现。儘管JavaScript作為給非程式人員的腳本語言,而非作為給程式人員的程式語言來推廣和宣傳,但是JavaScript具有非常豐富的特性。

常用函式庫

特性

不同於伺服器端腳本語言,例如PHPASP,JavaScript主要被作为客户端腳本語言在用戶的瀏覽器上運行,不需要伺服器的支持。所以在早期程序員比較青睞於JavaScript以減少對伺服器的負擔,而與此同時也帶來另一個問題:安全性。而隨著伺服器的強壯,雖然現在的程序員更喜歡運行於伺服端的腳本以保證安全,但JavaScript仍然以其跨平台、容易上手等優勢大行其道。同时,有些特殊功能(如AJAX)必须依赖Javascript在客户端进行支持。隨著引擎如V8和框架如Node.js的發展,及其事件驅動異步IO等特性,JavaScript逐漸被用來編寫伺服器端程式。

编程

JavaScript是一種腳本語言,其原始碼在發往客户端執行之前不需經過編譯,而是將文本格式的字符代碼發送給瀏覽器由瀏覽器解釋執行。直譯語言的弱點是安全性較差,而且在JavaScript中,如果一條執行不了,那麼下面的語言也無法執行。而其解決辦法就是於使用try{}catch(){}

console.log("a");    //-{zh-cn:这是正确的;zh-tw:這是正確的;}-
console.log("b");    //-{zh-cn:这是正确的;zh-tw:這是正確的;}-
console.logg("c");   //-{zh-cn:这是错误的,并且到这里会停下来;zh-tw:這不是正確的,並會到這裡時停下來;}-
console.log("d");    //-{zh-cn:这是正确的;zh-tw:這是正確的;}-
console.log("e");    //-{zh-cn:这是正确的;zh-tw:這是正確的;}-

/*-{zh-cn:解决办法;zh-tw:解決辦法;}-*/
try{console.log("a");}catch(e){}    //-{zh-cn:这是正确的;zh-tw:這是正確的;}-
try{console.log("b");}catch(e){}    //-{zh-cn:这是正确的;zh-tw:這是正確的;}-
try{console.logg("c");}catch(e){}   //-{zh-cn:这是错误的,但是到这里不会停下来,而是跳过;zh-tw:這不是正確的,但不會停下來,而是跳過;}-
try{console.log("d");}catch(e){}    //-{zh-cn:这是正确的;zh-tw:這是正確的;}-
try{console.log("e");}catch(e){}    //-{zh-cn:这是正确的;zh-tw:這是正確的;}-

Javascript被歸類為直譯語言,因為目前主流的引擎都是每次執行時載入程式碼並解譯。V8是將所有程式碼解譯後再開始執行,其他引擎則是逐行解譯(SpiderMonkey會將解譯過的指令暫存,以提高效能,稱為即時編譯),但由於V8的核心部份多數用Javascript撰寫(而SpiderMonkey是用C++),因此在不同的測試上,兩者效能互有優劣。

與其相對應的是編譯語言,例如C语言,以編譯語言編寫的程式在執行之前,必須經過編譯,將程式碼編譯為機器碼,再加以執行。

Hello World

以下是一個簡單的JavaScript Hello World

<!DOCTYPE HTML>
<html>
    <head>
    <title>簡單的JavaScript Hello World</title>
        <script type="text/javascript">
            document.write("Hello, world!");   // -{zh-cn:在浏览器视窗内直接显示;zh-tw:於瀏覽器視窗內直接顯示;}-
            alert("Hello, world!");            //  -{zh-cn:弹窗显示;zh-tw:於alert裡顯示;}-
            console.log("Hello, world!");      // -{zh-cn:在控制台(console)里显示,需要先开启开发工具控制台;zh-tw:於console裡顯示。IE下需要先开启开发工具控制台;}-
        </script>
    </head>
    <body>
-{zh-cn:HTML 内容……;zh-tw:HTML 內文……;}-
    </body>
</html>

或是在瀏覽器的網址列(location bar)中使用javascript:,以互動方式表示:

javascript:alert("Hello world!");

版本

JavaScript 已經被 Netscape 公司提交給 ECMA 制定為標準,稱之為 ECMAScript,標準編號 ECMA-262。目前最新版為 ECMA-262 5th Edition[10]。符合 ECMA-262 3rd Edition 標準的實現有:

目前 ECMA-262 4th Edition 正在開發的過程中,與其對應的 JavaScript 的版本為 JavaScript 2.0,目前也正在開發過程中。

版本 發佈日期 基於 Netscape Navigator Mozilla Firefox Internet Explorer Opera Safari Google Chrome
1.0 1996年3月 2.0
1.1 1996年8月 3.0 3.0
1.2 1997年6月 4.0-4.05
1.3 1998年10月 ECMA-262 1st edition / ECMA-262 2nd edition 4.06-4.7x 4.0
1.4 Netscape
Server
1.5 2000年11月 ECMA-262 3rd edition 6.0 1.0 5.5 (JScript 5.5),
6 (JScript 5.6),
7 (JScript 5.7),
8 (JScript 6)
6.0,
7.0,
8.0,
9.0
1.6 2005年11月 1.5 + Array extras + Array and String generics + E4X 1.5 3.0, 3.1
1.7 2006年10月 1.6 + Pythonic generators + Iterators + let 2.0 3.2, 4.0 1.0
1.8 2008年6月 1.7 + Generator expressions + Expression closures 3.0
1.8.1 1.8 + Native JSON support + Minor Updates 3.5
1.8.2 1.8.1 + Minor updates 3.6
1.8.5 1.8.1 + ECMAScript 5 Compliance 4 9

[11]

比較

ECMA
版本 說明 實現
ECMA v1 標準化了JavaScript1.1的基本特性,並添加了一些新特性。沒有標準化switch語句和正則表達式。 由Netscape 4.5和IE 4實現。
ECMA v2 ECMA v1的維護版本,只添加了說明。 由Netscape 4.5和IE 4實現。
ECMA v3 標準化了switch語句、異常處理和正則表達式。 由Mozilla、Netscape 6和IE 5.5實現。

參見

參考文獻

  1. ^ ECMAScript® 2024 Language Specification. 2024年6月 [2024年8月30日]. 
  2. ^ ECMAScript® 2025 Language Specification. 2024年3月27日 [2024年4月17日]. 
  3. ^ [1]
  4. ^ RFC 4329
  5. ^ System-Declared Uniform Type Identifiers. Mac OS X Reference Library. Apple Inc. [2010-03-05]. 
  6. ^ http://www.ecma-international.org/publications/index.html
  7. ^ Sun Trademarks. Sun Microsystems. [2007-11-08]. 
  8. ^ TechVision: Innovators of the Net: Brendan Eich and JavaScript (HTML). 2009-3-19. 
  9. ^ ECMAScript Language Overview (PDF): p.4. 2007-10-23. 
  10. ^ https://developer.mozilla.org/en/JavaScript/Language_Resources
  11. ^ John Resig. Versions of JavaScript. Ejohn.org. [2009-05-19]. 

外部連結