JavaScript

提示：此条目页的主题不是Java或JScript。

JavaScript

JavaScript源代码截图

编程范型| 事件驱动、函数式、指令式
設計者| 创造者布蘭登·艾克及ECMAScript规范的其他关键贡献者
发行时间| 1995年12月4日，​28年前​（1995-12-04）[1]
当前版本|

* ECMAScript 2024 (2024年6月；穩定版本)[2]
* ECMAScript 2025 (2024年3月27日；預發佈版本)[3]

型態系統| 动态类型、鸭子类型
文件扩展名|

* `.js`
* `.cjs`
* `.mjs`[4]

網站| www.ecma-international.org/publications-and-standards/standards/ecma-262/
主要實作產品
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/javascript
text/javascript (obsolete)[7]

统一类型标识| com.netscape.javascript-source[8]
格式类型| 脚本语言

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

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

对于客户端来说，JavaScript通常被实现为一门解释语言，但如今它已经可以被即时编译（JIT）。随着HTML5和CSS3语言标准的推行，它还可以用于游戏、桌面和移动应用程序的开发，以及在服务器端网络环境运行（如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]。除此之外，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提供`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的内部对象的原型（如`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的`<script>`元素）的功能。这本身不是语言功能，但在大多数JavaScript实现中很常见。

#### 承诺

[编辑]

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

一个承诺有三种状态： 待定（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!");

## 版本

[编辑]

参见：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]：

版本 | 發布日期 | 基於 | 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[58] \+ 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 |  |  |  |

## 參見

[编辑]

* 计算机程序设计主题

* 腳本語言
* DMDScript
* ECMAScript
* JavaScript引擎
* JScript
* AJAX
* JavaScript函式庫

## 參考文獻

[编辑]

1. ^ 1.0 1.1 Press release announcing JavaScript, "Netscape and Sun announce JavaScript", PR Newswire, December 4, 1995
2. ^ ECMAScript® 2024 Language Specification. 2024年6月  [2024年8月30日].
3. ^ ECMAScript® 2025 Language Specification. 2024年3月27日  [2024年4月17日].
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. 2011. ISBN 978-0-596-80552-4.
10. ^ 10.0 10.1 ECMAScript Language Overview (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. ^ Chapter 4. How JavaScript Was Created.  [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]. ISSN 0018-9162. 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. JavaScript, How Did We Get Here?. 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）.
58. ^ Pythonic generators （页面存档备份，存于互联网档案馆）

## 外部連結

[编辑]

維基教科書中的相關電子教程：JavaScript

* 關於JavaScript介紹（页面存档备份，存于互联网档案馆） Mozilla Developer Network上的資源

* 查
* 论
* 编

JavaScript

代码分析|

* ESLint
* JSHint
* JSLint

編譯器|

* CoffeeScript
* Dart
* Emscripten
* Google Closure Compiler（英语：Google Closure Compiler）
* Google Web Toolkit
* Morfik（英语：Morfik）
* TypeScript
* AtScript（英语：AtScript）
* Opa（英语：Opa (programming language)）
* Haxe
* Clojure
* Elm
* PureScript
* Reason

概念|

* Ajax
* 动态HTML
* JavaScript函式庫
* JavaScript语法
* 非侵入式JavaScript

调试工具|

* Firebug
* Komodo IDE（英语：Komodo IDE）
* Microsoft Script Debugger（英语：Microsoft Script Debugger）
* Microsoft Script Editor（英语：Microsoft Script Editor）
* Opera Dragonfly（英语：Opera Dragonfly）
* Venkman
* Safari

文档生成器（英语：Documentation generator）|

* JSDoc（英语：JSDoc）

編輯器（比较（英语：Comparison of JavaScript-based source code editors））|

* Ace（英语：Ace (editor)）
* Cloud9 IDE
* Atom
* CodeMirror（英语：CodeMirror）
* Light Table
* Brackets
* Koding
* Orion
* Visual Studio
* Visual Studio Express
* Visual Studio Code
* Visual Studio Team Services

引擎|

* ECMAScript引擎列表
* JavaScript引擎
* JavaScript引擎比较

軟體框架|

* JavaScript框架比较（英语：Comparison of JavaScript frameworks）
* JavaScript库列表

相關語言|

* ActionScript
* asm.js
* CoffeeScript
* Dart
* ECMAScript
* JavaScript OSA
* JScript
* TypeScript
* AtScript
* VBScript
* JSFuck

相關技術|

* CSS
* DOM
* HTML
* JSON
* WebAssembly

軟體套件管理系統|

* Npm
* NuGet

伺服器端|

* Active Server Pages
* CommonJS
* Deno
* JSGI（英语：JSGI）
* Node.js
* Wakanda（英语：Wakanda (software)）

單元測試|

* Jasmine（英语：Jasmine (JavaScript framework)）
* Mocha（英语：Mocha (JavaScript framework)）
* QUnit（英语：QUnit）
* JavaScript单元测试框架列表（英语：List of unit testing frameworks#JavaScript）

人物|

* 道格拉斯·克羅克福特
* 布蘭登·艾克
* 約翰·雷西格
* 瑞安·達爾

* 查
* 论
* 编

ECMAScript

语言|

* ActionScript
* Caja（英语：Caja project）
* JavaScript
* 引擎
* Asm.js
* JScript
* JScript .NET
* QtScript
* TypeScript
* WMLScript（英语：WMLScript）
* Dart
* CoffeeScript

引擎列表
（引擎比较）|

* Carakan
* Futhark
* InScript（英语：InScript (JavaScript engine)）
* JavaScriptCore
* JScript
* KJS
* Linear B
* Narcissus（英语：Narcissus (JavaScript engine)）
* QtScript
* Rhino
* SpiderMonkey
* TraceMonkey
* JägerMonkey
* Tamarin
* V8
* ChakraCore
* Chakra
* JScript .NET
* Nashorn（英语：Nashorn (JavaScript engine)）

框架|

| 客户端|

* Ample SDK（英语：Ample SDK）
* Chaplin.js（英语：Chaplin.js）
* Dojo
* Echo
* Extjs
* Google網頁工具包
* JQuery
* Lively Kernel（英语：Lively Kernel）
* midori（英语：Midori JavaScript Framework）
* MochiKit（英语：MochiKit）
* MooTools（英语：MooTools）
* Prototype
* Pyjs（英语：Pyjs）
* qooxdoo（英语：qooxdoo）
* Rialto（英语：Rialto Toolkit）
* Rico
* script.aculo.us（英语：script.aculo.us）
* SmartClient（英语：SmartClient）
* SproutCore（英语：SproutCore）
* Spry（英语：Spry framework）
* Wakanda框架（英语：Wakanda (software)）
* 雅虎UI库

|

服务器|

* AppJet（英语：AppJet）
* Jaxer（英语：Jaxer#Aptana Jaxer）
* Node.js
* Deno
* WakandaDB（英语：Wakanda (software)）

多種實作|

* Cappuccino（英语：Cappuccino (application development framework)）
* Objective-J（英语：Objective-J）
* PureMVC（英语：PureMVC）

函式庫|

* Backbone.js
* SWFObject（英语：SWFObject）
* SWFAddress（英语：SWFAddress）
* Lodash

人物|

* 布蘭登·艾克
* 道格拉斯·克羅克福特
* 約翰·雷西格
* Scott Isaacs（英语：Scott Isaacs）

其他|

* DHTML
* Ecma国际
* JSDoc（英语：JSDoc）
* JSGI（英语：JSGI）
* JSHint
* JSLint
* JSON
* JSSS（英语：JavaScript Style Sheets）
* Sputnik（英语：Sputnik (JavaScript conformance test)）
* SunSpider（英语：Browser speed test#SunSpider）
* 异步模块定义（英语：Asynchronous module definition）
* CommonJS

JavaScript库列表
Ajax框架（英语：list of Ajax frameworks#JavaScript）

JavaScript框架（英语：Comparison of JavaScript frameworks）
服务器端JavaScript（英语：comparison of server-side JavaScript solutions）

* 查
* 论
* 编

程序设计语言

范型|

| 过程式|

* FORTRAN
* COBOL
* JOVIAL
* ALGOL 60
* JOSS（英语：JOSS）
* BASIC
* PL/I
* MUMPS（英语：MUMPS）
* ALGOL 68
* Forth
* Pascal
* Turbo Pascal
* C
* Modula-2
* Ada 83
* occam
* Oberon
* Go
* Zig

|

面向对象|

* Simula 67
* Smalltalk
* Objective-C
* Eiffel
* Object Pascal
* Delphi
* Self
* Visual Basic
* Gambas
* Ada 95
* Java
* C#
* Vala

多范型|

* C++
* Modula-3
* Dylan
* Python
* Lua
* JavaScript
* Ruby
* D
* Factor
* Scala
* F#
* F*
* Haxe
* Nim
* Rust
* Dart
* Julia
* Swift

函数式|

* LISP
* Scheme
* Common Lisp
* Clojure
* Logo
* APL/J
* ML
* Standard ML
* OCaml
* Erlang
* Elixir
* Haskell
* Curry
* SAC
* Agda
* Idris
* jq（英语：jq (programming language)）

逻辑式|

* Prolog
* Datalog
* Mercury
* AnsProlog

脚本语言|

| 动态语言|

* SNOBOL
* Icon
* REXX
* Perl
* Raku
* Tcl/Tk
* CLOS
* newLISP
* Python
* Lua
* Ruby
* PHP
* Hack
* CFML（英语：ColdFusion Markup Language）
* REBOL
* Julia

|

Shell语言|

* Unix shell
* sh/ash
* csh/tcsh
* ksh
* bash
* zsh
* rc（英语：rc (Unix shell)）
* sed
* AWK
* PowerShell

ECMA-262|

* ECMAScript
* JavaScript
* TypeScript
* CoffeeScript/LiveScript（英语：LiveScript (programming language)）
* Elm
* PureScript
* Reason

特定平台|

| .NET|

* C#
* C++/CLI
* F#
* PowerShell
* VB.NET
* Small Basic

|

JVM|

* Java
* AspectJ（英语：AspectJ）
* Scala
* Clojure
* Groovy
* Kotlin

特定领域|

| 科学计算|

* Speakeasy（英语：Speakeasy (computational environment)）
* IDL
* GDL
* Maxima
* Maple
* MATLAB
* Octave
* Scilab
* Wolfram
* R
* Yorick（英语：Yorick (programming language)）
* SageMath
* Julia

|

GPU计算|

* Cg/HLSL
* GLSL
* Brook（英语：BrookGPU）
* OpenCL
* SYCL
* CUDA/PTX（英语：Parallel Thread Execution）
* Futhark
* SPIR-V（英语：Standard Portable Intermediate Representation）

数据查询|

* SQL
* PL/SQL
* T-SQL
* SQL/PSM（英语：SQL/PSM）
* xBase（英语：xBase）
* XPath
* XQuery（英语：XQuery）
* GraphQL

可视化|

* Simulink
* LabVIEW
* Orange（英语：Orange (software)）
* KNIME（英语：KNIME）
* Scratch
* Snap!
* Power Fx

传媒设计|

* SuperCollider
* Pure Data
* Processing
* ChucK

` `|

| 其它|

* 汇编语言
* APT（英语：APT (programming language)）
* GPSS（英语：GPSS）
* dc
* yacc
* make
* PostScript
* XSLT
* LLVM IR
* WebAssembly

|

* 目录
* 列表
* 历史
* 比较（英语：Comparison of programming languages）
* 时间线（英语：Timeline of programming languages）

* 查
* 论
* 编

網頁技術與標準

文档呈现语言|

* HTML*（HTML5*）
* XHTML*
* XML*
* XForms*
* DHTML

样式格式描述语言|

* CSS*
* XSL*

动态网页技术|

* CGI
* FastCGI
* ASP
* ASP.NET
* ColdFusion
* JSP
* Perl（PSGI）
* Python（WSGI）
* Ruby
* Smalltalk
* PHP

用戶端互動技术|

* JavaFX
* AJAX（XMLHTTP*）
* WebSocket*
* ActionScript（Flash
* Flex
* AIR）
* Asm.js
* NaCl
* WebAssembly*
* ActiveX
* Java applet

用戶端手稿語言|

* ECMAScript（JavaScript，JScript）
* VBScript

标识定位语言|

* URL
* URI
* XPath
* URL重寫

文档纲要语言|

* DTD*
* XML Schema*

* 代表由W3C制定和维护的标准与规范

* 查
* 论
* 编

網頁設計

用戶端|

| 語言|

* DHTML（HTML、CSS、JavaScript）
* HTML5
* ActionScript（用於Flash）

|

技術|

* 網頁親和力（無障礙網頁檢測（英语：Web Content Accessibility Guidelines））
* 無表格網頁設計
* 响应式网页设计
* MVVM
* WYSIWYG
* 容錯（優雅降級）
* CSS Sprite
* DOM
* WebGL
* MathML

伺服器端|

| 語言|

* Active Server Pages
* ASP.NET（C♯、VB.NET）
* JSP（Java）
* PHP
* CGI
* ColdFusion
* Perl
* Python
* Ruby
* Rust
* Smalltalk
* Node.js（JavaScript）

|

技術|

* Web应用框架
* AJAX
* MVC
* 單頁應用
* CRUD
* REST

應用|

* 網誌
* 网络论坛
* 企業入口網站
* 电子商务
* 内容管理系统
* 電子出版
* 數位下載
* 网页游戏

其他|

* 網頁程式設計
* 网络应用程序
* 网页浏览器比较
* 排版引擎
* 搜尋引擎最佳化

* 查
* 论
* 编

Node.js

软件|

* Node.js
* Npm
* V8
* CommonJS

框架|

* MEAN
* MongoDB
* Express.js
* AngularJS/Angular
* MEEN
* 以Ember.js取代Angular
* Backbone.js
* Meteor (Web應用框架)（英语：Meteor (web framework)）
* Sails.js（英语：Sails.js）

* Lodash
* Underscore.js（英语：Underscore.js）
* React.js
* Vue.js

编程语言|

* JavaScript
* CoffeeScript
* TypeScript

云平台|

* Joyent
* Nodejitsu（英语：Nodejitsu）
* OpenShift
* Linode
* DigitalOcean
* Google App Engine

* 查
* 论
* 编

网页浏览器

* 比較
* 列表
* 時間線
* 使用率
* 分類

* 广告拦截
* 增强浏览（英语：Augmented browsing）
* 書籤
* 小书签
* 即时书签（英语：Features of Firefox#Live bookmarks）
* 智能书签（英语：Smart Bookmarks）
* 擴充功能
* 安全（英语：Browser security）
* 同步
* 比较（英语：Comparison of browser synchronizers）
* Cookie
* 下载管理器
* Favicon
* 增量查找（英语：Incremental search）
* 插件
* 无痕浏览
* 分頁
* 通用编辑按钮（英语：Universal Edit Button）

|

網頁標準

* Acid測試
* HTML
* HTML5
* CSS
* SVG
* XHTML
* WebGL
* JavaScript
* 数学置标语言

* 超文本传输协议
* 超文本传输安全协议
* 在线证书状态协议
* SPDY
* 傳輸層安全性協定
* WebSocket
* 网络代理自动发现协议

相關主題

* BrowserChoice.eu
* 证书吊销列表
* iLoo（英语：iLoo）
* 网络套件
* 浏览器中间人攻击（英语：Man-in-the-browser）
* 移动端网页（英语：Mobile Web）
* 离线浏览
* 代理自动配置
* Pwn2Own
* 丰富互联网应用程序
* 指定网站浏览器（英语：Site-specific browser）
* 控件
* 万维网
* XML

電腦平台

Blink排版引擎

* Chromium
* Google Chrome
* 科摩多龙安全浏览器
* Avast Secure Browser
* Naver Whale
* SuperBird
* SRWare Iron
* Catalina Citrio
* CocCoc Corom
* Brave
* Vivaldi
* Opera（15～）
* Yandex Browser
* Microsoft Edge
* Torch
* CCleaner Browser
* Catsxp
* Coowon
* Orbitum
* BlackHawk
* uCoz Uran
* Ortigra Titanium
* HiddenReflex EpicPrivacy
* Sleipnir（4.0～）
* Konqueror
* ~~PlayFree~~
* ~~Beamrise~~
* ~~Baidu Spark~~
* ~~红芯浏览器~~
* ~~七星瀏覽器~~
* ~~Jutao Caimao~~
* ~~Rambler Nichrome~~
* ~~Ishenyou 265gChrome~~

|

WebKit排版引擎

* Safari
* Amazon Silk（英语：Amazon Silk）
* Konqueror
* Epiphany（2.28～）
* iCab（4.0～）
* ~~OmniWeb （4.0～）~~
* ABrowse
* ~~Uzbl~~
* Falkon
* Dooble
* Midori
* ~~Rekonq~~
* SkyKruzer
* ~~Arora~~
* ~~Flock~~
* ~~Shiira~~

Gecko排版引擎

* Firefox瀏覽器
* GNU IceCat
* Waterfox
* IceWeasel
* Comodo IceDragon
* ~~Cyberfox~~
* K-Meleon
* SeaMonkey
* ~~Galeon~~
* ~~SwiftWeasel~~
* ~~XB Browser~~
* ~~Netscape~~
* ~~Camino~~
* ~~Sleipnir~~ （2.x～3.x）
* ~~Beonex Communicator~~

Trident排版引擎

* ~~Internet Explorer~~
* ~~GreenBrowser~~
* SlimBrowser
* 2345加速瀏覽器
* MyIE
* KKman
* PCMan Combo
* ~~MSN Explorer~~
* ~~WebbIE~~
* ~~MenuBox~~
* Crazy Browser
* Deepnet Explorer
* GOSURF
* ~~iRider~~
* ~~mxie~~
* ~~NeoPlanet~~
* ~~AOL Explorer~~
* ~~Deepnet Explorer~~
* ~~NeoPlanet~~
* ~~NetCaptor~~
* ~~Sleipnir~~ （1.x）
* ~~MediaBrowser~~
* ~~SpaceTime~~
* ~~UltraBrowser~~

混合排版引擎

* Sleipnir
* Lunascape
* 猎豹安全浏览器
* 淘宝浏览器
* 爱帆浏览器
* 枫树浏览器
* 太陽花瀏覽器
* 世界之窗浏览器
* 360极速浏览器
* 360极速浏览器X
* 搜狗高速瀏覽器（2.0～）
* 傲游浏览器（3.0～）
* QQ浏览器（5.0～）

其他排版引擎

* NetSurf
* ~~abaco （英语：abaco (web browser)）~~
* ~~Amaya~~
* ~~KidZui （英语：KidZui）~~
* ~~Charon （英语：Charon (web browser)）~~
* ~~Dillo~~
* ~~Gazelle~~
* ~~IBM Watson Explorer~~
* Arachne（英语：Arachne (web browser)）
* ~~Arena~~
* ~~IBM Home Page Reader~~
* ~~IBrowse~~
* Links
* ~~Mosaic~~
* ~~Mothra （英语：Mothra (web browser)）~~
* ~~NetPositive~~
* 蒼月瀏覽器（26～）

純文字排版引擎

* ~~ELinks （英语：ELinks）~~
* Lynx
* w3m
* ~~Emacs/W3~~
* ~~Line Mode Browser~~
* ~~Net-Tamer~~

行動平台

Blink排版引擎

* Chromium
* Google Chrome
* Avast Secure Browser
* 三星瀏覽器
* Naver Whale
* Brave
* Vivaldi
* Opera
* Yandex Browser
* Microsoft Edge
* Via浏览器
* ~~Android瀏覽器~~
* Konqueror

|

WebKit排版引擎

* Safari
* Amazon Silk（英语：Amazon Silk）
* 海豚浏览器
* S60 web browser
* ~~Steel~~
* ~~BOLT~~
* Firefox for iOS
* Naver Whale for iOS

Gecko排版引擎

* Firefox
* GNU IceCat
* Waterfox
* ~~MicroB~~
* ~~Minimo~~

Trident排版引擎

* UC浏览器
* 傲游云浏览器
* ~~Internet Explorer Mobile~~

* ~~Blazer~~
* ibisBrowser
* NetFront
* Obigo Browser
* ~~Skweezer~~
* ~~Skyfire~~
* ~~Teashark~~
* ~~ThunderHawk~~
* uZard Web
* ~~Vision~~
* ~~WinWAP~~
* Smooz（日语：Smooz）
* ~~Galio~~
* ~~Deepfish~~
* ~~Iris浏览器~~

電視機和电子游戏机

Gecko排版引擎

* ~~Kylo~~

|

Presto排版引擎

* Internet Channel
* Opera設備瀏覽器
* Nintendo 3DS Internet Browser

WebKit排版引擎

* ~~Google TV~~
* NetFront
* Steam

* ~~MSN TV~~
* ~~Galio~~

~~刪除線格式~~ 為停止開發的項目

规范控制数据库

国际|

* FAST

各地|

* 西班牙
* 法国
* BnF data
* 德国
* 以色列
* 美国
* 捷克

其他|

* IdRef

*[查]: 查看该模板
*[论]: 讨论该模板
*[编]: 编辑该模板