行 1: |
- |
aaaaa
|
+ |
{{distinguish|Java|JScript}}
|
- |
|
+ |
{{noteTA
|
- |
sdf fsdaf
|
+ |
|G1=IT
|
|
|
+ |
|1=zh-hans:太阳微系统;zh-hk:太陽電腦;zh-tw:昇陽電腦;
|
|
|
+ |
|2=zh-hans:地址栏; zh-tw:網址列;
|
|
|
+ |
|3=zh-hans:在线;zh-hant:在線;zh-hk:線上;zh-tw:線上;zh-mo:線上;
|
|
|
+ |
|4=zh-hans:脚本语言;zh-tw:程式語言;
|
|
|
+ |
}}
|
|
|
+ |
{{Infobox programming language
|
|
|
+ |
| name = {{lang|en|JavaScript}}
|
|
|
+ |
| paradigm = [[脚本语言]], [[面向对象]] ([[原型程式设计|基于原型]]), [[指令式编程|指令式]], [[函数式编程|函数式]]
|
|
|
+ |
| year = 1995
|
|
|
+ |
| logo = [[File:JavaScript-logo.png|200px]]
|
|
|
+ |
| caption = Unofficial logo from JSConf EU 2011
|
|
|
+ |
| designer = [[Brendan Eich]]
|
|
|
+ |
| developer= [[网景通讯公司]],[[Mozilla基金会]]
|
|
|
+ |
| latest_release_version = 1.8.5<ref>[https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.8.5]</ref>
|
|
|
+ |
| latest_release_date = {{start date and age|2011|3|22}}
|
|
|
+ |
| latest_preview_version =
|
|
|
+ |
| latest_preview_date = {{start date and age|2010|7|27}}
|
|
|
+ |
| typing = [[动态类型]], [[weak typing|weak]], [[duck typing|duck]]
|
|
|
+ |
| implementations = [[KJS]], [[Rhino (JavaScript engine)|Rhino]], [[SpiderMonkey]], [[V8 (JavaScript引擎)|V8]], [[WebKit]], [[Presto#JavaScript引擎|Carakan]], [[Chakra (JScript引擎)|Chakra]]
|
|
|
+ |
| influenced_by = [[C (programming language)|C]], [[Java (programming language)|Java]], [[Perl]], [[Python]], [[Scheme (programming language)|Scheme]], [[Self]]
|
|
|
+ |
| influenced = [[ActionScript]], [[CoffeeScript]], [[Dart]], [[JScript .NET]], [[Objective-J]], [[QML]], TIScript,[[TypeScript]]
|
|
|
+ |
| license =
|
|
|
+ |
| website =
|
|
|
+ |
| wikibooks = JavaScript
|
|
|
+ |
}}
|
|
|
+ |
{{Infobox file format
|
|
|
+ |
| name = {{lang|en|JavaScript}}
|
|
|
+ |
| icon = [[File:Javascript icon.svg|150px]]
|
|
|
+ |
| logo =
|
|
|
+ |
| screenshot =
|
|
|
+ |
| caption =
|
|
|
+ |
| extension = .js
|
|
|
+ |
| mime = application/javascript<br />text/javascript (obsolete)<ref>[http://www.apps.ietf.org/rfc/rfc4329.html#sec-7.1 RFC 4329]</ref>
|
|
|
+ |
| type code =
|
|
|
+ |
| uniform type = com.netscape.javascript-source<ref>{{cite web
|
|
|
+ |
| publisher = Apple Inc.
|
|
|
+ |
| url = http://developer.apple.com/mac/library/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html
|
|
|
+ |
| title = System-Declared Uniform Type Identifiers
|
|
|
+ |
| work = Mac OS X Reference Library
|
|
|
+ |
| accessdate = 2010-03-05
|
|
|
+ |
}}</ref>
|
|
|
+ |
| magic =
|
|
|
+ |
| owner =
|
|
|
+ |
| released =
|
|
|
+ |
| latest release version =
|
|
|
+ |
| latest release date =
|
|
|
+ |
| genre = [[脚本语言]]
|
|
|
+ |
| container for =
|
|
|
+ |
| contained by =
|
|
|
+ |
| extended from =
|
|
|
+ |
| extended to =
|
|
|
+ |
| standard =
|
|
|
+ |
| url =
|
|
|
+ |
}}
|
|
|
+ |
{{lang|en|'''JavaScript'''}},一種[[直譯語言|直譯]]式程式語言,是一种[[动态类型]]、弱类型、[[原型程式設計|基于原型]]的语言,内置支持類別。它的[[直譯器]]被稱為[[JavaScript引擎]],為[[瀏覽器]]的一部份,廣泛用於[[客户端]]的[[腳本語言]],最早是在[[HTML]]網頁上使用,用来给HTML網頁增加動態功能。然而现在JavaScript也可被用于[[网络服务器]],如[[Node.js]]。
|
|
|
|
|
- |
士大夫
|
+ |
在1995年時,由[[網景]]公司的[[布兰登·艾克]],在[[網景領航員]]瀏覽器上首次設計實作而成。因為[[網景]]公司與[[昇陽]]公司合作,網景公司管理階層希望它外觀看起來像[[Java]],因此取名為JavaScript。但實際上它的語法風格與[[Self]]及[[Scheme]]較為接近。
|
- |
发的
|
|
|
- |
sd
|
+ |
為了取得技術優勢,[[微軟]]推出了[[JScript]],CEnvi推出[[ScriptEase]],與JavaSript同樣可在瀏覽器上運行。為了統一規格,1997年,在ECMA(欧洲计算机制造商协会)的协调下,由Netscape、Sun、微软、Borland组成的工作组确定统一标准:ECMA-262。因為JavaScript相容於ECMA標準,因此也稱為[[ECMAScript]]<ref>http://www.ecma-international.org/publications/index.html</ref>。
|
|
|
+ |
==概論==
|
|
|
+ |
一般来说,完整的JavaScript包括以下几个部分:
|
|
|
+ |
*ECMAScript,描述了该语言的语法和基本对象
|
|
|
+ |
*文档对象模型(DOM),描述处理'''网页内容'''的方法和接口
|
|
|
+ |
*浏览器对象模型(BOM),描述与'''浏览器'''进行交互的方法和接口
|
|
|
|
|
|
|
+ |
它的基本特点如下:
|
|
|
+ |
*是一种解释性脚本语言(代码不进行预编译)。
|
|
|
+ |
*主要用来向 HTML 页面添加'''交互行为'''。
|
|
|
+ |
*可以直接嵌入 HTML 页面,但写成单独的js文件有利于结构和行为的分离。
|
|
|
|
|
|
|
+ |
JavaScript常用来完成以下任务:
|
|
|
+ |
*嵌入动态文本于[[HTML]]页面
|
|
|
+ |
*对浏览器事件作出响应
|
|
|
+ |
*读写[[HTML]]元素
|
|
|
+ |
*在数据被提交到服务器之前验证数据
|
|
|
+ |
*检测访客的浏览器信息
|
|
|
+ |
*控制[[cookies]],包括创建和修改等
|
|
|
|
|
|
|
+ |
== 历史 ==
|
|
|
+ |
它最初由[[网景公司]]的[[布兰登·艾克]]设计。JavaScript是[[甲骨文公司]]的注册商标。<ref>{{cite web|title=Sun Trademarks|url=http://www.sun.com/suntrademarks/|publisher=Sun Microsystems|accessdate=2007-11-08}}</ref>
|
|
|
+ |
[[Ecma国际]]以JavaScript为基础制定了[[ECMAScript]]标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:[[ECMAScript]],[[文档对象模型]],[[浏览器对象模型]]。
|
|
|
|
|
|
|
+ |
[[Netscape]]在最初將其腳本語言命名為LiveScript,後來Netscape在與Sun合作之後將其改名為JavaScript。JavaScript最初受[[Java]]启发而开始设计的,目的之一就是“看上去像Java”<ref>{{cite web|title=TechVision: Innovators of the Net: Brendan Eich and JavaScript|url=http://web.archive.org/web/20080208124612/http://wp.netscape.com/comprod/columns/techvision/innovators_be.html|format=HTML|date=2009-3-19}}</ref>,因此语法上有类似之处,一些名称和命名规范也借自Java。但JavaScript的主要设计原则源自[[Self]]和[[Scheme]]<ref>{{cite web|title=ECMAScript Language Overview|url=http://www.ecmascript.org/es4/spec/overview.pdf|format=PDF|pages=p.4|date=2007-10-23}}</ref>。JavaScript与Java名称上的近似,是当时网景为了营销考虑与[[太陽電腦]]达成协议的结果。為了取得技術優勢,[[微軟]]推出了[[JScript]]來迎戰JavaScript的[[腳本語言]]。为了互用性,[[Ecma国际]](前身为[[欧洲计算机制造商协会]])建立了ECMA-262标准(ECMAScript)。现在两者都属于[[ECMAScript]]的实现。儘管JavaScript作為給非程式人員的[[腳本語言]],而非作為給程式人員的[[程式語言]]來推廣和宣傳,但是JavaScript具有非常豐富的特性。
|
|
|
|
|
|
|
+ |
发展初期,JavaScript的标准并未确定,同期有网景的JavaScript,微软的JScript和CEnvi的ScriptEase三足鼎立。1997年,在ECMA(欧洲计算机制造商协会)的协调下,由Netscape、Sun、微软、Borland组成的工作组确定统一标准:ECMA-262。
|
|
|
|
|
|
|
+ |
== 常用函式庫 ==
|
|
|
+ |
{{see|JavaScript函式庫}}
|
|
|
|
|
|
|
+ |
== 特性 ==
|
|
|
+ |
不同於[[伺服器]]端腳本語言,例如[[PHP]]与[[Active Server Pages|ASP]],JavaScript主要被作为[[客户端]]腳本語言在用戶的[[瀏覽器]]上運行,不需要伺服器的支持。所以在早期[[程序員]]比較青睞於JavaScript以減少對伺服器的負擔,而與此同時也帶來另一個問題:安全性。而隨著伺服器的強壯,雖然現在的程序員更喜歡運行於伺服端的腳本以保證安全,但JavaScript仍然以其跨平台、容易上手等優勢大行其道。同时,有些特殊功能(如AJAX)必须依赖Javascript在客户端进行支持。隨著引擎如V8和框架如[[Node.js]]的發展,及其[[事件驅動]]及[[異步IO]]等特性,JavaScript逐漸被用來編寫[[伺服器]]端程式。
|
|
|
|
|
|
|
+ |
== 编程 ==
|
|
|
+ |
JavaScript是一種[[腳本語言]],其[[原始碼]]在發往客户端執行之前不需經過編譯,而是將文本格式的字符代碼發送給瀏覽器由瀏覽器解釋執行。[[直譯語言]]的弱點是安全性較差,而且在JavaScript中,如果一條執行不了,那麼下面的語言也無法執行。而其解決辦法就是於使用<code>try{}catch(){}</code>︰
|
|
|
+ |
<source lang="javascript">
|
|
|
+ |
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:這是正確的;}-
|
|
|
+ |
</source>
|
|
|
|
|
|
|
+ |
Javascript被歸類為直譯語言,因為目前主流的引擎都是每次執行時載入程式碼並解譯。V8是將所有程式碼解譯後再開始執行,其他引擎則是逐行解譯(SpiderMonkey會將解譯過的指令暫存,以提高效能,稱為[[即時編譯]]),但由於V8的核心部份多數用Javascript撰寫(而SpiderMonkey是用C++),因此在不同的測試上,兩者效能互有優劣。
|
|
|
|
|
|
|
+ |
與其相對應的是[[編譯語言]],例如[[C语言]],以編譯語言編寫的程式在執行之前,必須經過編譯,將程式碼編譯為機器碼,再加以執行。
|
|
|
|
|
|
|
+ |
== Hello World ==
|
|
|
+ |
以下是一個簡單的JavaScript [[Hello World]]︰
|
|
|
+ |
<source lang="javascript">
|
|
|
+ |
<!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>
|
|
|
+ |
</source>
|
|
|
|
|
|
|
+ |
或是在[[瀏覽器]]的網址列(location bar)中使用<code>javascript:</code>,以互動方式表示:
|
|
|
+ |
<source lang="javascript">
|
|
|
+ |
javascript:alert("Hello world!");
|
|
|
+ |
</source>
|
|
|
|
|
|
|
+ |
== 版本 ==
|
|
|
+ |
JavaScript 已經被 [[Netscape]] 公司提交給 [[ECMA]] 制定為標準,稱之為 [[ECMAScript]],標準編號 [[ECMA-262]]。目前最新版為 ECMA-262 5th Edition<ref>https://developer.mozilla.org/en/JavaScript/Language_Resources</ref>。符合 ECMA-262 3rd Edition 標準的實現有:
|
|
|
+ |
*[[Microsoft]] 公司的 [[JScript]]
|
|
|
+ |
*[[Mozilla]] 的 JavaScript-C(C語言實現),現名 [[SpiderMonkey]]
|
|
|
+ |
*[[Mozilla]] 的 [[Rhino]](Java 實現)
|
|
|
+ |
*[[Digital Mars]] 公司的 [[DMDScript]]
|
|
|
+ |
*[[Google]] 公司的 [[V8 (JavaScript引擎)|V8]]
|
|
|
+ |
*[[WebKit]]
|
|
|
+ |
目前 ECMA-262 4th Edition 正在開發的過程中,與其對應的 JavaScript 的版本為 JavaScript 2.0,目前也正在開發過程中。
|
|
|
|
|
|
|
+ |
{| class="wikitable" style="font-size: smaller; text-align: center;"
|
|
|
+ |
|-
|
|
|
+ |
! 版本 !! 發佈日期 !! 基於 !! [[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 || nowrap|1998年10月 || ECMA-262 1<sup>st</sup> edition / ECMA-262 2<sup>nd</sup> edition || 4.06-4.7x || || 4.0 || || ||
|
|
|
+ |
|-
|
|
|
+ |
| 1.4 || || || Netscape<br />Server || || || || ||
|
|
|
+ |
|-
|
|
|
+ |
| 1.5 || 2000年11月 || ECMA-262 3<sup>rd</sup> edition || 6.0 || 1.0 || 5.5 (JScript 5.5),<br />6 (JScript 5.6),<br />7 (JScript 5.7),<br />8 (JScript 6) || 6.0,<br />7.0,<br />8.0,<br />9.0<br /> || ||
|
|
|
+ |
|-
|
|
|
+ |
| 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 || ||
|
|
|
+ |
|}
|
|
|
|
|
|
|
+ |
<ref>{{cite web|author=John Resig |url=http://ejohn.org/blog/versions-of-javascript |title=Versions of JavaScript |publisher=Ejohn.org |date= |accessdate=2009-05-19}}</ref>
|
|
|
|
|
|
|
+ |
== 比較 ==
|
|
|
+ |
{| class="wikitable" width=100%
|
|
|
+ |
|+'''ECMA'''
|
|
|
+ |
! 版本
|
|
|
+ |
! 說明
|
|
|
+ |
! 實現
|
|
|
+ |
|-
|
|
|
+ |
| nowrap|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實現。
|
|
|
+ |
|}
|
|
|
|
|
|
|
+ |
== 參見 ==
|
|
|
+ |
{{Wikibooks}}
|
|
|
+ |
*[[腳本語言]]
|
|
|
+ |
*[[DMDScript]]
|
|
|
+ |
*[[ECMAScript]]
|
|
|
+ |
*[[JavaScript引擎]]
|
|
|
+ |
*[[JScript]]
|
|
|
+ |
*[[AJAX]]
|
|
|
+ |
*[[JavaScript函式庫]]
|
|
|
|
|
|
|
+ |
== 參考文獻 ==
|
|
|
+ |
{{Reflist}}
|
|
|
|
|
|
|
+ |
== 外部連結 ==
|
|
|
+ |
*[http://www.mozilla.org/js About JavaScript] Mozilla.org上的資源{{en}}{{zh-cn}}{{ja}}
|
|
|
+ |
*[http://irw.ncut.edu.tw/peterju/jscript.html JavaScript Note]{{zh-tw}}
|
|
|
+ |
*[http://www.w3schools.com/js/default.asp W3Schools上的JavaScript線上教學]{{en}}
|
|
|
|
|
|
|
+ |
{{程序设计语言|JavaScript}}
|
|
|
+ |
{{網頁技術與標準}}
|
|
|
+ |
{{ECMAScript}}
|
|
|
|
|
|
|
+ |
[[Category:腳本語言]]
|
|
|
+ |
[[Category:JavaScript程式語言]]
|