跳转到内容

JavaScript

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

这是本页的一个历史版本,由Xue Fuqiao留言 | 贡献2015年3月10日 (二) 12:27 (语法 -> 语义)编辑。这可能和当前版本存在着巨大的差异。

JavaScript
非官方JavaScript標誌
编程范型脚本语言面向对象基于原型),指令式函数式
設計者布蘭登·艾克
實作者网景通讯公司Mozilla基金会
发行时间1995年,​30年前​(1995
当前版本
  • ECMAScript 2024(2024年6月;穩定版本)[1]
  • ECMAScript 2025(2024年3月27日;預發佈版本)[2]
編輯維基數據鏈接
型態系統动态类型weakduck
網站www.ecma-international.org/publications-and-standards/standards/ecma-262/ 編輯維基數據鏈接
主要實作產品
KJSRhinoSpiderMonkeyV8WebKitCarakanChakra
受影响于
CJavaPerlPythonSchemeSelf
影響語言
ActionScriptCoffeeScriptDartJScript .NETObjective-JQML、TIScript、TypeScript
JavaScript
扩展名
.js
互联网媒体类型
application/javascript
text/javascript (obsolete)[4]
统一类型标识com.netscape.javascript-source[5]
格式类型脚本语言

JavaScript,一種直譯式程式語言,是一种动态类型、弱类型、基于原型的语言,内置支持類別。它的直譯器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用於客户端腳本語言,最早是在HTML網頁上使用,用来给HTML網頁增加動態功能。然而现在JavaScript也可被用于网络服务器,如Node.js

在1995年時,由網景公司的布兰登·艾克,在網景領航員瀏覽器上首次設計實作而成。因為網景公司與昇陽公司合作,網景公司管理階層希望它外觀看起來像Java,因此取名為JavaScript。但實際上它的语义與SelfScheme較為接近[6]

為了取得技術優勢,微軟推出了JScript,與JavaScript同樣可在瀏覽器上運行。為了統一規格,1997年,在ECMA(欧洲计算机制造商协会)的协调下,由網景、昇陽、微软和Borland公司组成的工作组确定统一标准:ECMA-262。因為JavaScript相容於ECMA標準,因此也稱為ECMAScript[7]

概論

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

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

它的基本特点如下:

  • 是一种解释性脚本语言(代码不进行预编译)。
  • 主要用来向HTML页面添加交互行为
  • 可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离。

JavaScript常用来完成以下任务:

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

历史

它最初由网景公司布兰登·艾克设计。JavaScript是甲骨文公司的注册商标。[8] Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript文档对象模型浏览器对象模型

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

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

常用函式庫

特性

不同於伺服器端腳本語言,例如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:開啟對話視窗顯示;}-
            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[12]。符合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 11.50
1.8.1 1.8 + Native JSON support + Minor Updates 3.5
1.8.2 2009年6月22日 1.8.1 + Minor updates 3.6
1.8.5 2010年7月27日 1.8.1 + ECMAScript 5 Compliance 4 9 11.60

[13]

比較

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. ^ ECMAScript Language Overview (PDF): 4. 2007-10-23 [2009-05-03]. 
  7. ^ http://www.ecma-international.org/publications/index.html
  8. ^ Sun Trademarks. Sun Microsystems. [2007-11-08]. 
  9. ^ Press release announcing JavaScript, "Netscape and Sun announce Javascript", PR Newswire, December 4, 1995
  10. ^ TechVision: Innovators of the Net: Brendan Eich and JavaScript (HTML). 2009-03-19. 
  11. ^ ECMAScript Language Overview (PDF): p.4. 2007-10-23. 
  12. ^ https://developer.mozilla.org/en/JavaScript/Language_Resources
  13. ^ John Resig. Versions of JavaScript. Ejohn.org. [2009-05-19]. 

外部連結