fbpx
维基百科

JavaScript

JavaScript(通常缩写为JS)是一门基于原型头等函数的多范式高级解释型编程语言[9][10],它支持面向对象程式設計、指令式编程函数式编程。它提供方法来操控文本、数组、日期以及正则表达式等。不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。它由Ecma通过ECMAScript实现语言的标准化[9]。目前,它被世界上的绝大多数网站所使用,也被世界主流浏览器ChromeIEFirefoxSafariOpera)所支持。

JavaScript
JavaScript源代码截图
编程范型事件驱动函数式指令式
設計者创造者布蘭登·艾克ECMAScript规范的其他关键贡献者
发行时间1995年12月4日,​28年前​(1995-12-04[1]
当前版本
  • ECMAScript 2021 (2021年6月;穩定版本)[2]
  • ECMAScript 2022 (2021年7月22日;預發佈版本)[3]
型態系統动态类型鸭子类型
文件扩展名
  • .js
  • .cjs
  • .mjs[4]
網站www.ecma-international.org/publications-and-standards/standards/ecma-262/
主要實作產品
V8JavaScriptCoreSpiderMonkeyChakra
啟發語言
AWK[5]CHyperTalk英语HyperTalkJava[6]LuaPerlPythonSchemeSelf
影響語言
ActionScriptAtScript英语AtScriptCoffeeScriptDartJScript .NETLiveScript英语LiveScriptObjective-J英语Objective-JOpa英语Opa_(programming_language)QMLRakuTypeScript
JavaScript
扩展名
.js
互联网媒体类型
application/javascript
text/javascript (obsolete)[7]
统一类型标识com.netscape.javascript-source[8]
格式类型脚本语言

JavaScript与Java在名字和语法上都很相似,但这两门编程语言从设计之初就有很大不同。JavaScript在语言设计上主要受到了Self(一种基于原型的编程语言)和Scheme(一门函数式编程语言)的影响[10],在语法结构上它和C语言很相似(如if条件语句、switch语句、while循环和do-while循环等)[11]

对于客户端来说,JavaScript通常被实现为一门解释语言,但如今它已经可以被即时编译(JIT)。随着HTML5CSS3语言标准的推行,它还可以用于游戏、桌面和移动应用程序的开发,以及在服务器端网络环境运行(如Node.js)。

历史 编辑

肇始於網景 编辑

1993年,國家超級電腦應用中心(NCSA)發表了NCSA Mosaic,這是最早流行的圖形介面網頁瀏覽器,它在全球資訊網的普及上發揮了重要作用[12]。1994年,Mosaic的主要開發人員創立了Netscape公司,並雇用了許多原來的NCSA Mosaic開發者用來開發Netscape Navigator,該公司的目標是取代NCSA Mosaic成為世界第一的網頁瀏覽器。在四個月內,已經佔據了四分之三的瀏覽器市場,並成為1990年代網際網路的主要瀏覽器[13]

在網路發展的這些年,網頁只能是靜態的,缺乏在瀏覽器中載入網頁後的動態行為能力。公司的創始人馬克·安德森認為HTML需要一種膠水語言,讓網頁設計師和兼職程式設計師可以很容易地使用它來組裝圖片和外掛程式之類的元件,且程式碼可以直接編寫在網頁標記中。1995年,網景招募了布兰登·艾克,目標是把Scheme語言嵌入到Netscape Navigator瀏覽器中[14]。但更早之前,網景已經跟昇阳合作,计划在Netscape Navigator中嵌入Java語言,這時網景內部產生激烈的爭論[15]

網景公司管理層很快決定,最佳的方案是由艾克設計一種新的語言,其語法類似於Java,而不像Scheme或其他現存的腳本語言。為了在其他競爭提案中捍衛JavaScript這個想法,公司需要有一個可以運作的原型。艾克在1995年5月僅花了十天時間就把原型設計出來了[16][17]。最初命名為Mocha,1995年9月在Netscape Navigator 2.0的Beta版中改名為LiveScript,同年12月,Netscape Navigator 2.0 Beta 3中部署時被重新命名為JavaScript[1][18]。當時网景公司与昇阳电脑公司组成的开发联盟为了让这门语言搭上Java这个编程语言“热词”,因此将其临时改名为JavaScript,日后这成为大众对这门语言有诸多误解的原因之一[19]

微軟採納 编辑

微軟公司於1995年首次推出Internet Explorer,引發了與Netscape的瀏覽器大戰。微软對Netscape Navigator直譯器進行了逆向工程,創建了JScript,以與處於市場領導地位的網景產品同台競爭。JScript也是一種JavaScript實作,這兩個JavaScript語言版本在瀏覽器端共存意味著語言標準化的缺失。发展初期,JavaScript的标准并未确定,同期就有网景的JavaScript和微软的JScript。除此之外,微軟也在網頁技術上加入了不少專屬物件,使不少網頁使用非微軟平台及瀏覽器無法正常顯示[20][21]。这導致在瀏覽器大戰期間網頁設計者通常會把「用Netscape可達到最佳效果」或「用IE可達到最佳效果」的標誌放在首頁[20][22]

标准化 编辑

1996年11月,網景正式向ECMA(欧洲计算机制造商协会)提交語言標準。1997年6月,ECMA以JavaScript语言为基础制定了ECMAScript标准规范ECMA-262。JavaScript成為了ECMAScript最著名的實現之一[23]。除此之外,ActionScriptJScript也都是ECMAScript规范的实现语言。儘管JavaScript作為給非程式人員的腳本語言,而非作為給程式人員的程式語言來推廣和宣傳,但是JavaScript具有非常豐富的特性。

增长和标准化 编辑

在21世纪初Internet Explorer占主导地位期间,客户端脚本停滞不前。这在2004年开始改变,当时Netscape的继任者Mozilla发布了Firefox浏览器。Firefox受到许多人的好评,从Internet Explorer获得了巨大的市场份额。[24]

2005年,Mozilla加入了ECMA International,并开始研究ECMAScript for XML(E4X)标准。这导致Mozilla与Macromedia(后来被Adobe Systems收购)合作,他们正在用基于ECMAScript 4草案的ActionScript 3语言实现E4X。目标是将ActionScript 3标准化为新的ECMAScript 4。为此,Adobe Systems将Tamarin实现作为开源项目发布。然而,Tamarin和ActionScript 3与既定的客户端脚本太不同,如果没有微软的合作,ECMAScript 4从未取得成果。

与此同时,与ECMA工作无关的开源社区正在发生非常重要的发展。2005年,Jesse James Garrett发布了一份白皮书,其中他创造了Ajax一词,并描述了一套技术,其中JavaScript是骨干,用于创建可以在后台加载数据的Web应用程序,避免了重新加载整页的需要。这引发了JavaScript的复兴时期,由开源库和围绕它们形成的社区带头。创建了许多新库,包括jQuery、Prototype、Dojo Toolkit和MooTools。

谷歌于2008年首次推出Chrome浏览器,其V8 JavaScript引擎比竞争对手更快。[25]关键的创新是及时编译(JIT)[26],因此其他浏览器供应商需要为JIT彻底改革他们的引擎[27]

2008年7月,这些不同的政党聚集在一起,在奥斯陆举行会议。这导致在2009年初达成了最终协议,将所有相关工作结合起来,推动语言向前发展。结果是2009年12月发布的ECMAScript 5标准。

走向成熟 编辑

关于该语言的雄心勃勃的工作持续了数年,最终随着 2015 年ECMAScript 6的发布而正式形成了广泛的补充和改进。

Ryan Dahl在 2009 年创建的Node.js引发了 Web 浏览器之外 JavaScript 使用的显着增加。Node 结合了V8引擎、事件循环和I/O API,从而提供了独立的 JavaScript 运行时系统。截至 2018 年,Node 已被数百万开发人员使用,并且npm拥有世界上所有包管理器中最多的模块。

ECMAScript 草案规范目前在GitHub上公开维护,并通过定期的年度快照生成版本。对语言的潜在修订通过全面的提案流程进行审查。现在,开发人员不再单独检查即将推出的功能的状态,而不是版本号。

当前的 JavaScript 生态系统拥有许多库和框架、已建立的编程实践以及在 Web 浏览器之外大量使用 JavaScript。另外,随着单页应用程序和其他大量使用 JavaScript 的网站的兴起,已经创建了多个转译器来帮助开发过程。

概論 编辑

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

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

JavaScript的基本特点如下:

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

JavaScript常用来完成以下任务:

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

特性 编辑

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

以下是ECMAScript通常所实现的特性。

指令式与结构化 编辑

JavaScript支持许多C语言的结构化编程语法(如if条件语句、while循环、switch语句和do-while循环等),但作用域是一个例外。JavaScript在过去只支持使用var关键字来定义变量的函数作用域,但ECMAScript 2015中加入了let关键字来支持块级作用域[28]。这意味着JavaScript现在既支持函数作用域又支持块级作用域。JavaScript还支持自动在语句末添加分号,允许忽略语句末尾的分号。[29]

弱类型 编辑

JavaScript是弱类型的,这意味着变量可以被隐式转换为另一个类型。[30]

  • 二元运算符+会把两个操作数转换为字符串,除非两个操作数都为数字类型。[31]这是因为+也表示字符串连接操作;
  • 二元操作符-会把两个操作数转换为数字类型;[32]
  • 一元操作符,包括+-,都会把操作数转换为数字。

下列为变量转换为字符串的例子:

  • 字符串类型不变;
  • 数字会转换为其字符串表示;
  • 数组的元素会转换为字符串,然后连接成通过逗号,分隔的长字符串;
  • 其它对象会转换为[object Object],其中Object中该对象的构造函数名。[33]

类型的隐藏转换是JavaScript受到批评的原因之一,因为隐藏转换增加了规则的复杂度和发生错误的可能性。[34]

JavaScript中的隐式转换[35][36]:
左操作数 操作符 右操作数 结果
[](空数组) + [](空数组) ""(空字符串)
[](空数组) + {}(空对象) "[object Object]"(字符串)
false(布尔值) + ""(空字符串) "false"(字符串)
"123"(字符串) + 1(数字) "1231"(字符串)
"123"(字符串) - 1(数字) 122 (数字)

动态化 编辑

类型 编辑

JavaScript是动态类型的语言,其类型与值而不是与变量相关联。例如变量可以为数字,随后又可被赋值为字符串。JavaScript提供了包括鸭子类型在内的方法来检测变量类型。

运行时估值 编辑

JavaScript提供eval()函数,可以在运行时直接执行JavaScript语句。[37]

基于原型的面向对象 编辑

在JavaScript中,对象是关联数组,通过原型(prototype,见下)进行扩充。每一个字符串键值提供对象的一个属性的名称,可以通过使用点号(obj.x)或使用方括号(obj['x'])这两种效果相同的方式来访问。属性可以在运行时添加、重定义或删除。一个对象的大多数属性(包括来自原型继承链的属性)都可以通过 for...in循环访问。[38]

原型 编辑

JavaScript使用原型,而许多其它面向对象语言使用类用于实现继承。原型使得在JavaScript中模拟基于类的面向对象特征变成可能。[39]

函数作为对象构造器 编辑

函数在JavaScript中兼作为对象构造函数。在函数调用前加上new会创建一个原型的实例,并继承来自构造函数的属性和方法(包括来自Object原型)。[40]ECMAScript 5提供Object.create方法,可以显式地创建实例而不是自动从Object继承。[41]构造函数的prototype属性决定了用于新对象的内部原型。可以通过修改构造函数的原型的方法来为对象添加新的方法,也可以修改JavaScript的内部对象的原型(如ArrayObject)。尽管可以这么做,但对Object原型进行修改并不是好的做法。因为大多数JavaScript对象都会从Object继承,且不会希望其原型被修改。[42]

函数作为方法 编辑

和大多数面向对象的语言不同,在JavaScript中函数定义和方法定义没有明显区别。唯一的区别在于调用时:当函数被作为方法调用时,函数的this会指向调用此函数的对象。[43]

传统的类定义与使用格式 编辑

ECMAScript 2015中加入了对classextends关键字的支持,使得类的定义与继承更类似于其他的面向对象语言,同时也更易使用。[44][45]

函数式 编辑

在JavaScript中,函数是一等的,函数也被认为是对象。因此,函数可以有属性和方法,例如call()bind等。[46]嵌套函数指定义于其它函数内部的函数,在外部函数被调用时,嵌套函数会被创建。另外,嵌套函数是一个闭包,在外部函数的作用域(包括常量,局部变量和参数)都成为内部函数状态的一部分,甚至在外部函数执行完毕后,内部函数的状态依然保留[47]。JavaScript同时也支持匿名函数[48]

其它 编辑

运行时环境 编辑

JavaScript通常依赖于运行时环境(例如浏览器)来提供对象和方法,脚本可以通过这些对象和方法与环境(例如网页DOM)进行交互。它还依赖于运行时环境来提供包或导入脚本(例如HTML<script>元素)的功能。这本身不是语言功能,但在大多数JavaScript实现中很常见。

承诺 编辑

JavaScript的“承诺”(Promises)是一种编程模型,它允许表示可能在未来某个时间点完成或失败的值。承诺被设计为一个解决异步编程中所遇到的问题的更简洁和一致的方法。它为处理异步操作提供了一个更清晰的方式,相比于传统的回调函数(callbacks)。

一个承诺有三种状态: 待定(Pending): 初始状态,既不是成功也不是失败。 已实现(Fulfilled): 意味着操作成功完成。 已拒绝(Rejected): 意味着操作失败。 承诺的主要特点是它们的状态一旦改变(从待定到已实现或已拒绝),就不能再次改变。这使得承诺成为一个可靠的信息来源,无论它们是否成功。

在JavaScript中,你可以使用then方法来附加回调函数,这些回调函数会在承诺达到已实现或已拒绝状态时执行。还有一个catch方法,专门用于处理被拒绝的承诺。为了使链式调用更简洁,then和catch都会返回一个新的承诺。 ES6(ECMAScript 2015)引入了原生的Promise对象,从此承诺成为JavaScript标准的一部分。此后的版本还提供了额外的实用方法,例如Promise.all()和Promise.race(),用于处理多个承诺。

异步 编辑

JavaScript一般来说是单线程的。[49]为了并发地处理事件,JavaScript程序输入或输出时使用事件回调函数执行。这意味着JavaScript可以在等待数据库查询返回信息之前处理鼠标单击。ECMAScript 2015引入了Promise用于处理异步事件,其可以使得传统的基于回调的异步代码更加清晰简单。[50][51]

变长参数 编辑

JavaScript中函数参数的长度是可变的,在函数内部可以通过arguments对象访问这些参数。[52]

编程 编辑

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

console.log("a"); //这是正确的 console.log("b"); //这是正确的 console.logg("c"); //这是错误的,并且到这里会停下来 console.log("d"); //这是正确的 console.log("e"); //这是正确的 /* 解決辦法 */ try { console.log("a"); } catch (e) {} //这是正确的 try { console.log("b"); } catch (e) {} //这是正确的 try { console.logg("c"); } catch (e) {} //这是错误的,但是到这里不会停下来,而是跳过 try { console.log("d"); } catch (e) {} //这是正确的 try { console.log("e"); } catch (e) {} //这是正确的 

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

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

範例 编辑

以下是一個簡單的JavaScript Hello World

<!DOCTYPE HTML> <html> <head> <title>简单的JavaScript Hello World</title> <script> document.write("Hello, world!"); // 直接插入页面中 alert("Hello, world!"); // 弹窗显示 console.log("Hello, world!"); // 在控制台(console)里显示,需要先开启开发工具控制台 </script> </head> <body>     HTML内容…… </body> </html>

或是在瀏覽器地址栏中使用javascript:,以互動方式表示:

javascript:alert("Hello world!"); 

版本 编辑

JavaScript最初開發於1996年,被使用於Netscape Navigator網頁瀏覽器。同年微軟在Internet Explorer發布了一個實作。由於商標問題,這項實作被命名為JScript。1997年,JavaScript已經被網景公司提交給ECMA制定為標準,稱之為ECMAScript,標準編號ECMA-262。使用顯式版本號聲明對語言的引用,作爲一項Mozilla的特性,已在較新版本中被移除(至少為Firefox 59)。Firefox 4是最後一個需要顯式地在引用時聲明明確版本號的版本(1.8.5)。

下列表格的資訊基於多個參考來源[53][54][55][56]

版本 發布日期 基於 Netscape
Navigator
Mozilla
Firefox
Internet
Explorer
Opera Safari Google
Chrome
舊版本,不再支援: 1.0 1996年3月 2.0 3.0
舊版本,不再支援: 1.1 1996年8月 3.0
舊版本,不再支援: 1.2 1997年6月 4.0 - 4.05 3
舊版本,不再支援: 1.3 1998年10月 ECMA-262 1st + 2nd edition 4.06 - 4.7x 4.0 5[57]
舊版本,不再支援: 1.4 Netscape
Server
6
舊版本,不再支援: 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 5.8)
7.0 3.0-5 1.0 - 10.0.666
舊版本,不再支援: 1.6 2005年11月 1.5 + Array extras + Array and string generics + E4X 1.5
舊版本,不再支援: 1.7 2006年10月 1.6 + Pythonic generators (页面存档备份,存于互联网档案馆) + Iterators + Let 2.0 28.0.1500.95
舊版本,不再支援: 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.2 + New features for ECMA-262 5th edition compliance 4.0

參見 编辑

參考文獻 编辑

  1. ^ 1.0 1.1 , "Netscape and Sun announce JavaScript", PR Newswire, December 4, 1995
  2. ^ ECMAScript® 2021 language specification. 2021年6月 [2021年7月27日]. 
  3. ^ https://tc39.es/ecma262/; 检索日期: 2021年7月27日; 作品或名稱語言: 英語; 出版日期: 2021年7月22日.
  4. ^ nodejs/node-eps. GitHub. [2018-07-05]. (原始内容于2020-08-29). 
  5. ^ Brendan Eich: An Introduction to JavaScript, JSConf 2010: 22m. [November 25, 2019]. (原始内容于2020-08-29). 
  6. ^ "Coders at Work: Reflections on the Craft of Programming". [December 25, 2018]. (原始内容于2020-09-23). 
  7. ^ RFC 4329. [2012-03-02]. (原始内容于2014-03-16). 
  8. ^ System-Declared Uniform Type Identifiers. Mac OS X Reference Library. Apple Inc. [2010-03-05]. (原始内容于2018-12-25). 
  9. ^ 9.0 9.1 David, Flanagan. JavaScript: The Definitive Guide 6th. O'Reilly & Associates. ISBN 978-0-596-80552-4. 
  10. ^ 10.0 10.1 (PDF): 4. 2007-10-23 [2009-05-03]. (原始内容 (PDF)存档于2009-03-26). 
  11. ^ JavaScript: The World's Most Misunderstood Programming Language. www.crockford.com. [2016-08-17]. (原始内容于2020-12-07). 
  12. ^ Bloomberg Game Changers: Marc Andreessen. Bloomberg. March 17, 2011 [December 7, 2011]. (原始内容于2012-05-16). 
  13. ^ Enzer, Larry. The Evolution of the Web Browsers. Monmouth Web Developers. August 31, 2018 [August 31, 2018]. (原始内容于2018-08-31). 
  14. ^ . [2018-07-14]. (原始内容存档于2020-02-27). 
  15. ^ Severance, Charles. JavaScript: Designing a Language in 10 Days. Computer (IEEE Computer Society). February 2012, 45 (2): 7–8 [23 March 2013]. doi:10.1109/MC.2012.57. (原始内容于2015-04-17). 
  16. ^ 引证错误:没有为名为looklikejava的参考文献提供内容
  17. ^ 引证错误:没有为名为origin的参考文献提供内容
  18. ^ TechVision: Innovators of the Net: Brendan Eich and JavaScript. web.archive.org. [2009-03-19]. (原始内容于2008-02-08). 
  19. ^ Fin JS, Brendan Eich - CEO of Brave, 2016-06-17 [2018-02-07], (原始内容于2020-08-29) 
  20. ^ 20.0 20.1 Champeon, Steve. . oreilly.com. 6 April 2001 [16 July 2016]. (原始内容存档于2016-07-19). 
  21. ^ Microsoft Internet Explorer 3.0 Beta Now Available. microsoft.com. Microsoft. 29 May 1996 [16 July 2016]. (原始内容于2020-11-24). 
  22. ^ McCracken, Harry. The Unwelcome Return of "Best Viewed with Internet Explorer". technologizer.com. September 16, 2010 [July 16, 2016]. (原始内容于2018-06-23). 
  23. ^ Nicholas, Zakas. Professional JavaScript for Web Developers 3rd. Wrox. 2012. ISBN 978-1-118-02669-4. 
  24. ^ The assault on software giant Microsoft. 2005-05-09 [2023-10-22]. (原始内容于2017-08-25) (英国英语). 
  25. ^ Lifehacker Speed Tests: Safari 4, Chrome 2, and More. Lifehacker. 2009-06-11 [2023-10-22]. (原始内容于2021-04-14) (英语). 
  26. ^ TraceMonkey: JavaScript Lightspeed – Brendan Eich. brendaneich.com. [2023-10-22]. (原始内容于2015-12-04). 
  27. ^ Calore, Michael. Mozilla Asks, 'Are We Fast Yet?'. Wired. [2023-10-22]. ISSN 1059-1028. (原始内容于2018-06-22) (美国英语). 
  28. ^ 存档副本. [2020-07-09]. (原始内容于2021-01-12). 
  29. ^ 存档副本. [2020-07-09]. (原始内容于2020-12-03). 
  30. ^ 存档副本. [2020-07-09]. (原始内容于2020-12-14). 
  31. ^ 存档副本. [2020-07-09]. (原始内容于2020-11-19). 
  32. ^ 存档副本. [2020-07-09]. (原始内容于2021-01-27). 
  33. ^ 存档副本. [2020-07-09]. (原始内容于2020-10-31). 
  34. ^ 存档副本. [2020-07-09]. (原始内容于2020-08-29). 
  35. ^ 存档副本. [2020-07-09]. (原始内容于2020-12-15). 
  36. ^ 存档副本. [2020-07-09]. (原始内容于2020-08-29). 
  37. ^ 存档副本. [2020-07-09]. (原始内容于2021-02-04). 
  38. ^ 存档副本. [2020-07-09]. (原始内容于2020-12-14). 
  39. ^ 存档副本. [2020-07-09]. (原始内容于2020-12-04). 
  40. ^ . [2020-07-09]. (原始内容存档于2020-12-14). 
  41. ^ 存档副本. [2020-07-09]. (原始内容于2020-12-04). 
  42. ^ 存档副本. [2020-07-09]. (原始内容于2020-07-16). 
  43. ^ 存档副本. [2020-07-09]. (原始内容于2020-07-16). 
  44. ^ 存档副本. [2020-07-09]. (原始内容于2020-11-12). 
  45. ^ 存档副本. [2020-07-09]. (原始内容于2020-11-19). 
  46. ^ 存档副本. [2020-07-09]. (原始内容于2020-11-27). 
  47. ^ 存档副本. [2020-07-09]. (原始内容于2020-12-03). 
  48. ^ 存档副本. [2020-07-09]. (原始内容于2020-11-24). 
  49. ^ 存档副本. [2020-07-09]. (原始内容于2020-11-02). 
  50. ^ 存档副本. [2020-07-09]. (原始内容于2020-10-27). 
  51. ^ 存档副本. [2020-07-09]. (原始内容于2020-12-01). 
  52. ^ 存档副本. [2020-07-09]. (原始内容于2021-01-29). 
  53. ^ New in JavaScript. developer.mozilla.org. 2014 [2016-07-16]. (原始内容于2019-03-22). 
  54. ^ JavaScript – JScript – ECMAScript version history. Webmasterworld.com. [2009-12-17]. (原始内容于2012-11-10). 
  55. ^ John Resig. Versions of JavaScript. Ejohn.org. [2009-05-19]. (原始内容于2017-01-21). 
  56. ^ Version Information (JScript). Msdn.microsoft.com. [2009-12-17]. (原始内容于2001-12-07). 
  57. ^ What Version of JavaScript. [2016-08-27]. (原始内容于2017-01-09). 

外部連結 编辑

javascript, 提示, 此条目的主题不是java或jscript, 通常缩写为js, 是一门基于原型和头等函数的多范式高级解释型编程语言, 它支持面向对象程式設計, 指令式编程和函数式编程, 它提供方法来操控文本, 数组, 日期以及正则表达式等, 不支持i, 比如网络, 存储和图形等, 但这些都可以由它的宿主环境提供支持, 它由ecma通过ecmascript实现语言的标准化, 目前, 它被世界上的绝大多数网站所使用, 也被世界主流浏览器, chrome, firefox, safari和opera, 所支. 提示 此条目的主题不是Java或JScript JavaScript 通常缩写为JS 是一门基于原型和头等函数的多范式高级解释型编程语言 9 10 它支持面向对象程式設計 指令式编程和函数式编程 它提供方法来操控文本 数组 日期以及正则表达式等 不支持I O 比如网络 存储和图形等 但这些都可以由它的宿主环境提供支持 它由Ecma通过ECMAScript实现语言的标准化 9 目前 它被世界上的绝大多数网站所使用 也被世界主流浏览器 Chrome IE Firefox Safari和Opera 所支持 JavaScriptJavaScript源代码截图编程范型事件驱动 函数式 指令式設計者创造者布蘭登 艾克及ECMAScript规范的其他关键贡献者发行时间1995年12月4日 28年前 1995 12 04 1 当前版本ECMAScript 2021 2021年6月 穩定版本 2 ECMAScript 2022 2021年7月22日 預發佈版本 3 型態系統动态类型 鸭子类型文件扩展名 js cjs mjs 4 網站www wbr ecma international wbr org wbr publications and standards wbr standards wbr ecma 262 wbr 主要實作產品V8 JavaScriptCore SpiderMonkey Chakra啟發語言AWK 5 C HyperTalk 英语 HyperTalk Java 6 Lua Perl Python Scheme Self影響語言ActionScript AtScript 英语 AtScript CoffeeScript Dart JScript NET LiveScript 英语 LiveScript Objective J 英语 Objective J Opa 英语 Opa programming language QML Raku TypeScript維基教科書中有關JavaScript的文本JavaScript扩展名 js互联网 媒体类型application javascripttext javascript obsolete 7 统一类型标识com netscape javascript source 8 格式类型脚本语言JavaScript与Java在名字和语法上都很相似 但这两门编程语言从设计之初就有很大不同 JavaScript在语言设计上主要受到了Self 一种基于原型的编程语言 和Scheme 一门函数式编程语言 的影响 10 在语法结构上它和C语言很相似 如if条件语句 switch语句 while循环和do while循环等 11 对于客户端来说 JavaScript通常被实现为一门解释语言 但如今它已经可以被即时编译 JIT 随着HTML5和CSS3语言标准的推行 它还可以用于游戏 桌面和移动应用程序的开发 以及在服务器端网络环境运行 如Node js 目录 1 历史 1 1 肇始於網景 1 2 微軟採納 1 3 标准化 1 4 增长和标准化 1 5 走向成熟 2 概論 3 特性 3 1 指令式与结构化 3 2 弱类型 3 3 动态化 3 3 1 类型 3 3 2 运行时估值 3 4 基于原型的面向对象 3 4 1 原型 3 4 2 函数作为对象构造器 3 4 3 函数作为方法 3 4 4 传统的类定义与使用格式 3 5 函数式 3 6 其它 3 6 1 运行时环境 3 6 2 承诺 3 6 3 异步 3 6 4 变长参数 4 编程 5 範例 6 版本 7 參見 8 參考文獻 9 外部連結历史 编辑肇始於網景 编辑 1993年 國家超級電腦應用中心 NCSA 發表了NCSA Mosaic 這是最早流行的圖形介面網頁瀏覽器 它在全球資訊網的普及上發揮了重要作用 12 1994年 Mosaic的主要開發人員創立了Netscape公司 並雇用了許多原來的NCSA Mosaic開發者用來開發Netscape Navigator 該公司的目標是取代NCSA Mosaic成為世界第一的網頁瀏覽器 在四個月內 已經佔據了四分之三的瀏覽器市場 並成為1990年代網際網路的主要瀏覽器 13 在網路發展的這些年 網頁只能是靜態的 缺乏在瀏覽器中載入網頁後的動態行為能力 公司的創始人馬克 安德森認為HTML需要一種膠水語言 讓網頁設計師和兼職程式設計師可以很容易地使用它來組裝圖片和外掛程式之類的元件 且程式碼可以直接編寫在網頁標記中 1995年 網景招募了布兰登 艾克 目標是把Scheme語言嵌入到Netscape Navigator瀏覽器中 14 但更早之前 網景已經跟昇阳合作 计划在Netscape Navigator中嵌入Java語言 這時網景內部產生激烈的爭論 15 網景公司管理層很快決定 最佳的方案是由艾克設計一種新的語言 其語法類似於Java 而不像Scheme或其他現存的腳本語言 為了在其他競爭提案中捍衛JavaScript這個想法 公司需要有一個可以運作的原型 艾克在1995年5月僅花了十天時間就把原型設計出來了 16 17 最初命名為Mocha 1995年9月在Netscape Navigator 2 0的Beta版中改名為LiveScript 同年12月 Netscape Navigator 2 0 Beta 3中部署時被重新命名為JavaScript 1 18 當時网景公司与昇阳电脑公司组成的开发联盟为了让这门语言搭上Java这个编程语言 热词 因此将其临时改名为JavaScript 日后这成为大众对这门语言有诸多误解的原因之一 19 微軟採納 编辑 微軟公司於1995年首次推出Internet Explorer 引發了與Netscape的瀏覽器大戰 微软對Netscape Navigator直譯器進行了逆向工程 創建了JScript 以與處於市場領導地位的網景產品同台競爭 JScript也是一種JavaScript實作 這兩個JavaScript語言版本在瀏覽器端共存意味著語言標準化的缺失 发展初期 JavaScript的标准并未确定 同期就有网景的JavaScript和微软的JScript 除此之外 微軟也在網頁技術上加入了不少專屬物件 使不少網頁使用非微軟平台及瀏覽器無法正常顯示 20 21 这導致在瀏覽器大戰期間網頁設計者通常會把 用Netscape可達到最佳效果 或 用IE可達到最佳效果 的標誌放在首頁 20 22 标准化 编辑 1996年11月 網景正式向ECMA 欧洲计算机制造商协会 提交語言標準 1997年6月 ECMA以JavaScript语言为基础制定了ECMAScript标准规范ECMA 262 JavaScript成為了ECMAScript最著名的實現之一 23 除此之外 ActionScript和JScript也都是ECMAScript规范的实现语言 儘管JavaScript作為給非程式人員的腳本語言 而非作為給程式人員的程式語言來推廣和宣傳 但是JavaScript具有非常豐富的特性 增长和标准化 编辑 在21世纪初Internet Explorer占主导地位期间 客户端脚本停滞不前 这在2004年开始改变 当时Netscape的继任者Mozilla发布了Firefox浏览器 Firefox受到许多人的好评 从Internet Explorer获得了巨大的市场份额 24 2005年 Mozilla加入了ECMA International 并开始研究ECMAScript for XML E4X 标准 这导致Mozilla与Macromedia 后来被Adobe Systems收购 合作 他们正在用基于ECMAScript 4草案的ActionScript 3语言实现E4X 目标是将ActionScript 3标准化为新的ECMAScript 4 为此 Adobe Systems将Tamarin实现作为开源项目发布 然而 Tamarin和ActionScript 3与既定的客户端脚本太不同 如果没有微软的合作 ECMAScript 4从未取得成果 与此同时 与ECMA工作无关的开源社区正在发生非常重要的发展 2005年 Jesse James Garrett发布了一份白皮书 其中他创造了Ajax一词 并描述了一套技术 其中JavaScript是骨干 用于创建可以在后台加载数据的Web应用程序 避免了重新加载整页的需要 这引发了JavaScript的复兴时期 由开源库和围绕它们形成的社区带头 创建了许多新库 包括jQuery Prototype Dojo Toolkit和MooTools 谷歌于2008年首次推出Chrome浏览器 其V8 JavaScript引擎比竞争对手更快 25 关键的创新是及时编译 JIT 26 因此其他浏览器供应商需要为JIT彻底改革他们的引擎 27 2008年7月 这些不同的政党聚集在一起 在奥斯陆举行会议 这导致在2009年初达成了最终协议 将所有相关工作结合起来 推动语言向前发展 结果是2009年12月发布的ECMAScript 5标准 走向成熟 编辑 关于该语言的雄心勃勃的工作持续了数年 最终随着 2015 年ECMAScript 6的发布而正式形成了广泛的补充和改进 Ryan Dahl在 2009 年创建的Node js引发了 Web 浏览器之外 JavaScript 使用的显着增加 Node 结合了V8引擎 事件循环和I O API 从而提供了独立的 JavaScript 运行时系统 截至 2018 年 Node 已被数百万开发人员使用 并且npm拥有世界上所有包管理器中最多的模块 ECMAScript 草案规范目前在GitHub上公开维护 并通过定期的年度快照生成版本 对语言的潜在修订通过全面的提案流程进行审查 现在 开发人员不再单独检查即将推出的功能的状态 而不是版本号 当前的 JavaScript 生态系统拥有许多库和框架 已建立的编程实践以及在 Web 浏览器之外大量使用 JavaScript 另外 随着单页应用程序和其他大量使用 JavaScript 的网站的兴起 已经创建了多个转译器来帮助开发过程 概論 编辑一般来说 完整的JavaScript包括以下几个部分 ECMAScript 描述了该语言的语法和基本对象 文档对象模型 DOM 描述处理网页内容的方法和接口 浏览器对象模型 BOM 描述与浏览器进行交互的方法和接口 JavaScript的基本特点如下 是一种解释性脚本语言 代码不进行预编译 主要用来向HTML页面添加交互行为 可以直接嵌入HTML页面 但写成单独的js文件有利于结构和行为的分离 JavaScript常用来完成以下任务 嵌入动态文本于HTML页面 对浏览器事件作出响应 读写HTML元素 在数据被提交到服务器之前验证数据 检测访客的浏览器信息 控制Cookie 包括创建和修改等 特性 编辑不同於伺服器端腳本語言 如PHP和ASP JavaScript主要被作为客户端腳本語言在用戶的瀏覽器上運行 不需要伺服器的支持 所以在早期程式設計師比較青睞於JavaScript以減少對伺服器的負擔 而與此同時在安全性上出现了问题 隨著伺服器變得強大 現在的程序員更喜歡運行於伺服器端的腳本以保證安全 但JavaScript仍然以其跨平台 容易上手等優勢大行其道 同时 有些特殊功能 如AJAX 必须依赖JavaScript在客户端提供支持 隨著引擎 如V8 和框架 如Node js 的發展 以及事件驅動和異步IO等特性 JavaScript也被逐漸用來編寫伺服器端程式 以下是ECMAScript通常所实现的特性 指令式与结构化 编辑 JavaScript支持许多C语言的结构化编程语法 如if条件语句 while循环 switch语句和do while循环等 但作用域是一个例外 JavaScript在过去只支持使用var关键字来定义变量的函数作用域 但ECMAScript 2015中加入了let关键字来支持块级作用域 28 这意味着JavaScript现在既支持函数作用域又支持块级作用域 JavaScript还支持自动在语句末添加分号 允许忽略语句末尾的分号 29 弱类型 编辑 JavaScript是弱类型的 这意味着变量可以被隐式转换为另一个类型 30 二元运算符 会把两个操作数转换为字符串 除非两个操作数都为数字类型 31 这是因为 也表示字符串连接操作 二元操作符 会把两个操作数转换为数字类型 32 一元操作符 包括 和 都会把操作数转换为数字 下列为变量转换为字符串的例子 字符串类型不变 数字会转换为其字符串表示 数组的元素会转换为字符串 然后连接成通过逗号 分隔的长字符串 其它对象会转换为 object Object 其中Object中该对象的构造函数名 33 类型的隐藏转换是JavaScript受到批评的原因之一 因为隐藏转换增加了规则的复杂度和发生错误的可能性 34 JavaScript中的隐式转换 35 36 左操作数 操作符 右操作数 结果 空数组 空数组 空字符串 空数组 空对象 object Object 字符串 false 布尔值 空字符串 false 字符串 123 字符串 1 数字 1231 字符串 123 字符串 1 数字 122 数字 动态化 编辑 类型 编辑 JavaScript是动态类型的语言 其类型与值而不是与变量相关联 例如变量可以为数字 随后又可被赋值为字符串 JavaScript提供了包括鸭子类型在内的方法来检测变量类型 运行时估值 编辑 JavaScript提供 a href Eval html title Eval eval a 函数 可以在运行时直接执行JavaScript语句 37 基于原型的面向对象 编辑 在JavaScript中 对象是关联数组 通过原型 prototype 见下 进行扩充 每一个字符串键值提供对象的一个属性的名称 可以通过使用点号 obj x 或使用方括号 obj x 这两种效果相同的方式来访问 属性可以在运行时添加 重定义或删除 一个对象的大多数属性 包括来自原型继承链的属性 都可以通过 for in循环访问 38 原型 编辑 JavaScript使用原型 而许多其它面向对象语言使用类用于实现继承 原型使得在JavaScript中模拟基于类的面向对象特征变成可能 39 函数作为对象构造器 编辑 函数在JavaScript中兼作为对象构造函数 在函数调用前加上new会创建一个原型的实例 并继承来自构造函数的属性和方法 包括来自Object原型 40 ECMAScript 5提供Object create方法 可以显式地创建实例而不是自动从Object继承 41 构造函数的prototype属性决定了用于新对象的内部原型 可以通过修改构造函数的原型的方法来为对象添加新的方法 也可以修改JavaScript的内部对象的原型 如Array或Object 尽管可以这么做 但对Object原型进行修改并不是好的做法 因为大多数JavaScript对象都会从Object继承 且不会希望其原型被修改 42 函数作为方法 编辑 和大多数面向对象的语言不同 在JavaScript中函数定义和方法定义没有明显区别 唯一的区别在于调用时 当函数被作为方法调用时 函数的this会指向调用此函数的对象 43 传统的类定义与使用格式 编辑 ECMAScript 2015中加入了对class和extends关键字的支持 使得类的定义与继承更类似于其他的面向对象语言 同时也更易使用 44 45 函数式 编辑 在JavaScript中 函数是一等的 函数也被认为是对象 因此 函数可以有属性和方法 例如call 和bind等 46 嵌套函数指定义于其它函数内部的函数 在外部函数被调用时 嵌套函数会被创建 另外 嵌套函数是一个闭包 在外部函数的作用域 包括常量 局部变量和参数 都成为内部函数状态的一部分 甚至在外部函数执行完毕后 内部函数的状态依然保留 47 JavaScript同时也支持匿名函数 48 其它 编辑 运行时环境 编辑 JavaScript通常依赖于运行时环境 例如浏览器 来提供对象和方法 脚本可以通过这些对象和方法与环境 例如网页DOM 进行交互 它还依赖于运行时环境来提供包或导入脚本 例如HTML的 lt script gt 元素 的功能 这本身不是语言功能 但在大多数JavaScript实现中很常见 承诺 编辑 JavaScript的 承诺 Promises 是一种编程模型 它允许表示可能在未来某个时间点完成或失败的值 承诺被设计为一个解决异步编程中所遇到的问题的更简洁和一致的方法 它为处理异步操作提供了一个更清晰的方式 相比于传统的回调函数 callbacks 一个承诺有三种状态 待定 Pending 初始状态 既不是成功也不是失败 已实现 Fulfilled 意味着操作成功完成 已拒绝 Rejected 意味着操作失败 承诺的主要特点是它们的状态一旦改变 从待定到已实现或已拒绝 就不能再次改变 这使得承诺成为一个可靠的信息来源 无论它们是否成功 在JavaScript中 你可以使用then方法来附加回调函数 这些回调函数会在承诺达到已实现或已拒绝状态时执行 还有一个catch方法 专门用于处理被拒绝的承诺 为了使链式调用更简洁 then和catch都会返回一个新的承诺 ES6 ECMAScript 2015 引入了原生的Promise对象 从此承诺成为JavaScript标准的一部分 此后的版本还提供了额外的实用方法 例如Promise all 和Promise race 用于处理多个承诺 异步 编辑 JavaScript一般来说是单线程的 49 为了并发地处理事件 JavaScript程序输入或输出时使用事件和回调函数执行 这意味着JavaScript可以在等待数据库查询返回信息之前处理鼠标单击 ECMAScript 2015引入了Promise用于处理异步事件 其可以使得传统的基于回调的异步代码更加清晰简单 50 51 变长参数 编辑 JavaScript中函数参数的长度是可变的 在函数内部可以通过arguments对象访问这些参数 52 编程 编辑JavaScript是一门腳本語言 其原始碼在客户端執行前不需經過編譯 而是將文本格式的字符代碼發送給瀏覽器 由瀏覽器解釋執行 直譯語言的弱點是安全性較差 而且在JavaScript中 如果一條语句執行不了 通常它下面的語言也就無法執行 解決辦法是使用异常处理try catch console log a 这是正确的 console log b 这是正确的 console logg c 这是错误的 并且到这里会停下来 console log d 这是正确的 console log e 这是正确的 解決辦法 try console log a catch e 这是正确的 try console log b catch e 这是正确的 try console logg c catch e 这是错误的 但是到这里不会停下来 而是跳过 try console log d catch e 这是正确的 try console log e catch e 这是正确的 JavaScript被歸類為直譯語言 因為主流的引擎都是每次執行時載入程式碼並解譯 V8是將所有程式碼解譯後再開始執行 其他引擎則是逐行解譯 SpiderMonkey會將解譯過的指令暫存 以提高效能 稱為即時編譯 但由於V8的核心部份多數用JavaScript撰寫 而SpiderMonkey是用C 因此在不同的測試上 兩者效能互有優劣 與其相對應的是編譯語言 如C语言 以編譯語言編寫的程式在執行之前必須經過編譯 將程式碼編譯為機器碼 才可以執行 範例 编辑以下是一個簡單的JavaScript Hello World lt DOCTYPE HTML gt lt html gt lt head gt lt title gt 简单的JavaScript Hello World lt title gt lt script gt document write Hello world 直接插入页面中 alert Hello world 弹窗显示 console log Hello world 在控制台 console 里显示 需要先开启开发工具控制台 lt script gt lt head gt lt body gt HTML内容 lt body gt lt html gt 或是在瀏覽器的地址栏中使用javascript 以互動方式表示 javascript alert Hello world 版本 编辑参见 ECMAScript 版本 JavaScript最初開發於1996年 被使用於Netscape Navigator網頁瀏覽器 同年微軟在Internet Explorer發布了一個實作 由於商標問題 這項實作被命名為JScript 1997年 JavaScript已經被網景公司提交給ECMA制定為標準 稱之為ECMAScript 標準編號ECMA 262 使用顯式版本號聲明對語言的引用 作爲一項Mozilla的特性 已在較新版本中被移除 至少為Firefox 59 Firefox 4是最後一個需要顯式地在引用時聲明明確版本號的版本 1 8 5 下列表格的資訊基於多個參考來源 53 54 55 56 版本 發布日期 基於 NetscapeNavigator MozillaFirefox InternetExplorer Opera Safari GoogleChrome舊版本 不再支援 1 0 1996年3月 2 0 3 0舊版本 不再支援 1 1 1996年8月 3 0舊版本 不再支援 1 2 1997年6月 4 0 4 05 3舊版本 不再支援 1 3 1998年10月 ECMA 262 1st 2nd edition 4 06 4 7x 4 0 5 57 舊版本 不再支援 1 4 NetscapeServer 6舊版本 不再支援 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 5 8 7 0 3 0 5 1 0 10 0 666舊版本 不再支援 1 6 2005年11月 1 5 Array extras Array and string generics E4X 1 5舊版本 不再支援 1 7 2006年10月 1 6 Pythonic generators 页面存档备份 存于互联网档案馆 Iterators Let 2 0 28 0 1500 95舊版本 不再支援 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 2 New features for ECMA 262 5th edition compliance 4 0參見 编辑 nbsp 计算机程序设计主题 腳本語言 DMDScript ECMAScript JavaScript引擎 JScript AJAX JavaScript函式庫參考文獻 编辑 1 0 1 1 Press release announcing JavaScript Netscape and Sun announce JavaScript PR Newswire December 4 1995 ECMAScript 2021 language specification 2021年6月 2021年7月27日 https tc39 es ecma262 检索日期 2021年7月27日 作品或名稱語言 英語 出版日期 2021年7月22日 nodejs node eps GitHub 2018 07 05 原始内容存档于2020 08 29 Brendan Eich An Introduction to JavaScript JSConf 2010 22m November 25 2019 原始内容存档于2020 08 29 Coders at Work Reflections on the Craft of Programming December 25 2018 原始内容存档于2020 09 23 RFC 4329 2012 03 02 原始内容存档于2014 03 16 System Declared Uniform Type Identifiers Mac OS X Reference Library Apple Inc 2010 03 05 原始内容存档于2018 12 25 9 0 9 1 David Flanagan JavaScript The Definitive Guide 6th O Reilly amp Associates ISBN 978 0 596 80552 4 10 0 10 1 ECMAScript Language Overview PDF 4 2007 10 23 2009 05 03 原始内容 PDF 存档于2009 03 26 JavaScript The World s Most Misunderstood Programming Language www crockford com 2016 08 17 原始内容存档于2020 12 07 Bloomberg Game Changers Marc Andreessen Bloomberg March 17 2011 December 7 2011 原始内容存档于2012 05 16 Enzer Larry The Evolution of the Web Browsers Monmouth Web Developers August 31 2018 August 31 2018 原始内容存档于2018 08 31 Chapter 4 How JavaScript Was Created 2018 07 14 原始内容存档于2020 02 27 Severance Charles JavaScript Designing a Language in 10 Days Computer IEEE Computer Society February 2012 45 2 7 8 23 March 2013 doi 10 1109 MC 2012 57 原始内容存档于2015 04 17 引证错误 没有为名为looklikejava的参考文献提供内容 引证错误 没有为名为origin的参考文献提供内容 TechVision Innovators of the Net Brendan Eich and JavaScript web archive org 2009 03 19 原始内容存档于2008 02 08 Fin JS Brendan Eich CEO of Brave 2016 06 17 2018 02 07 原始内容存档于2020 08 29 20 0 20 1 Champeon Steve JavaScript How Did We Get Here oreilly com 6 April 2001 16 July 2016 原始内容存档于2016 07 19 Microsoft Internet Explorer 3 0 Beta Now Available microsoft com Microsoft 29 May 1996 16 July 2016 原始内容存档于2020 11 24 McCracken Harry The Unwelcome Return of Best Viewed with Internet Explorer technologizer com September 16 2010 July 16 2016 原始内容存档于2018 06 23 Nicholas Zakas Professional JavaScript for Web Developers 3rd Wrox 2012 ISBN 978 1 118 02669 4 The assault on software giant Microsoft 2005 05 09 2023 10 22 原始内容存档于2017 08 25 英国英语 Lifehacker Speed Tests Safari 4 Chrome 2 and More Lifehacker 2009 06 11 2023 10 22 原始内容存档于2021 04 14 英语 TraceMonkey JavaScript Lightspeed Brendan Eich brendaneich com 2023 10 22 原始内容存档于2015 12 04 Calore Michael Mozilla Asks Are We Fast Yet Wired 2023 10 22 ISSN 1059 1028 原始内容存档于2018 06 22 美国英语 存档副本 2020 07 09 原始内容存档于2021 01 12 存档副本 2020 07 09 原始内容存档于2020 12 03 存档副本 2020 07 09 原始内容存档于2020 12 14 存档副本 2020 07 09 原始内容存档于2020 11 19 存档副本 2020 07 09 原始内容存档于2021 01 27 存档副本 2020 07 09 原始内容存档于2020 10 31 存档副本 2020 07 09 原始内容存档于2020 08 29 存档副本 2020 07 09 原始内容存档于2020 12 15 存档副本 2020 07 09 原始内容存档于2020 08 29 存档副本 2020 07 09 原始内容存档于2021 02 04 存档副本 2020 07 09 原始内容存档于2020 12 14 存档副本 2020 07 09 原始内容存档于2020 12 04 存档副本 2020 07 09 原始内容存档于2020 12 14 存档副本 2020 07 09 原始内容存档于2020 12 04 存档副本 2020 07 09 原始内容存档于2020 07 16 存档副本 2020 07 09 原始内容存档于2020 07 16 存档副本 2020 07 09 原始内容存档于2020 11 12 存档副本 2020 07 09 原始内容存档于2020 11 19 存档副本 2020 07 09 原始内容存档于2020 11 27 存档副本 2020 07 09 原始内容存档于2020 12 03 存档副本 2020 07 09 原始内容存档于2020 11 24 存档副本 2020 07 09 原始内容存档于2020 11 02 存档副本 2020 07 09 原始内容存档于2020 10 27 存档副本 2020 07 09 原始内容存档于2020 12 01 存档副本 2020 07 09 原始内容存档于2021 01 29 New in JavaScript developer mozilla org 2014 2016 07 16 原始内容存档于2019 03 22 JavaScript JScript ECMAScript version history Webmasterworld com 2009 12 17 原始内容存档于2012 11 10 John Resig Versions of JavaScript Ejohn org 2009 05 19 原始内容存档于2017 01 21 Version Information JScript Msdn microsoft com 2009 12 17 原始内容存档于2001 12 07 What Version of JavaScript 2016 08 27 原始内容存档于2017 01 09 外部連結 编辑維基教科書中的相關電子教程 JavaScript關於JavaScript介紹 页面存档备份 存于互联网档案馆 Mozilla Developer Network上的資源 取自 https zh wikipedia org w index php title JavaScript amp oldid 80004096, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。