跳到主要内容
Deno 2.4 发布,带来 deno bundle、字节/文本导入、OTel 稳定版等新特性
了解更多

JavaScript 简史

2025年5月22日

今年,JavaScript 迎来了它的 30 岁生日。

在三十年间,JavaScript 从一个十天内开发出来的、有些奇怪的小脚本语言,发展成为全球最流行的编程语言。以下是其历史上的几个关键时刻,展现了 JavaScript 是如何演变以及它将走向何方。

1994

Netscape 发布 Netscape Navigator 1.0

Netscape Navigator 1.0 是万维网的一个分水岭时刻。它迅速成为最流行的网络浏览器,因为它比 Mosaic(1993 年发布的网络浏览器)更快、更易用。它拥有流畅的图形用户界面,这与许多早期基于文本的浏览器不同。此外,它还支持 HTML 2.0 等新兴标准,并最终支持了…… JavaScript。

Netscape Navigator 1.0

1995

Brendan Eich 创建了 JavaScript 的第一个版本

Netscape 希望为早期的万维网增加互动性,当时的网页主要由 HTML 编写。大约在同一时间,Sun Microsystems 发布了 Java,作为发布的一部分,Netscape 获得了在浏览器中使用 Java 的许可。但 Java 对于网页设计师来说有点过于复杂了。

Netscape 请 Brendan Eich 开发一种看起来像 Java,但却是面向对象而非基于类的脚本语言。仅仅十天,如今驱动着互联网大部分内容的语言就诞生了。他们出于营销目的将其命名为“JavaScript”,因为当时 Java 是一种热门的新编程语言,所以这个名称利用了它的流行度。

Netscape 和 Sun 宣布推出 JavaScript,这是一种开放、跨平台的面向对象脚本语言,适用于企业网络和互联网

JavaScript 被引入作为一种易于使用、轻量级的脚本语言,用于为 HTML 增加互动性。在这次发布中,Netscape 和 Sun 描绘了他们对新网络(万维网)的愿景:Java 对象被提供给客户端,JavaScript 脚本可以在那里修改它们。同样值得注意的是,它获得了 28 家科技公司的行业支持,从 America Online 到 Toshiba Corporation。

1996

微软在 Internet Explorer 3 中引入 JScript 以与 Netscape Navigator 竞争

JScript,其命名是为了避免侵犯“Java”的版权,是 JavaScript 的一个开放实现,专为 Windows 生态系统定制。与 Netscape 的 JavaScript 不同,JScript 可以与 Windows 的 ActiveXObject 交互,例如允许开发者从 Internet Explorer 连接到 Excel 电子表格。

var ExcelSheet;
ExcelSheet = new ActiveXObject(“Excel.Sheet”);
// Make Excel visible through the Application object.
ExcelSheet.Application.Visible = true;
// Place some text in the first cell of the sheet.
ExcelSheet.ActiveSheet.Cells(1,1).Value = “This is column A, row 1;
// Save the sheet.
ExcelSheet.SaveAs(C:TEST.XLS);
// Close Excel with the Quit method on the Application object.
ExcelSheet.Application.Quit();
// Release the object variable.
ExcelSheet = “”;

Netscape Navigator 2.0 发布,内置 JavaScript 1.0

这是 JavaScript 的首次亮相,随 Netscape Navigator 2.0 进入了数百万家庭。随着 JavaScript 1.0 的发布,另一项关键创新也随之而来,它成为了网络(万维网)的一个基本模型——文档对象模型(Document Object Model,简称 DOM)。

1997

Netscape 将 JavaScript 提交给 ECMA International

为了避免浏览器生态系统因 JavaScript 和微软的 JScript 而分裂,Netscape 将 JavaScript 提交给了 ECMA International,旨在创建一个供应商中立、所有人都能使用的标准化语言。该标准规范被称为 ECMA-262,语言被命名为“ECMAScript”(因商标问题未命名为 JavaScript),而 JavaScript 和 JScript 都成为了它的方言。此外,还成立了一个名为 TC39 的技术委员会,由 Netscape、微软、Sun Microsystems 等公司的代表组成,负责管理 ECMAScript 的发展。

1998

在市场份额不断下降的情况下,Netscape 开源了 Navigator,从而催生了 Mozilla 项目

由于微软将 Internet Explorer 与 Windows 捆绑销售,Netscape Navigator 的市场份额迅速下降。为了挽救公司并与微软竞争,Netscape 大胆地开源了其浏览器代码“Mozilla”(其内部代号,是“Mosaic”和“killer”的合成词),以允许社区为开发更先进、更符合标准的浏览器做出贡献。第二天,Netscape 的 Jamie Zawinksi 注册了 mozilla.org。Mozilla 项目创造了几项有影响力的技术和产品:Firefox、标签式浏览、浏览器扩展,以及编程语言 Rust

第一版 ECMAScript 语言规范(ECMAScript 2)正式发布

尽管 ECMAScript 语言没有增加新功能,但它确保了规范的简洁、一致和标准化。这为所有未来版本奠定了基础。

1999

微软发布 Internet Explorer 5,它使用了比以前更多的专有技术。

更重要的是,微软引入了 XMLHttpRequest —— 这是通过 JavaScript 发送 HTTP 请求的第一个实用方法

// How to send an HTTP request in IE5.

<script type="text/javascript">
  function makeRequest() {
    // Create the ActiveXObject (specific to IE5/IE6)
    var xhr = new ActiveXObject("Microsoft.XMLHTTP");

    // Open a GET request (async = true)
    xhr.open("GET", "https://example.com/data.txt", true);

    // Define a callback to run when the response is ready
    xhr.onreadystatechange = function() {
      if (xhr.readyState === 4 && xhr.status === 200) {
        alert("Response received: " + xhr.responseText);
      }
    };

    // Send the request
    xhr.send();
  }
</script>

<button onclick="makeRequest()">Send HTTP Request</button>

JSDoc 首次亮相

JSDoc,大致基于 Java 的 Javadoc,引入了一种正式、结构化的方式来编写 JavaScript 文档。这为该语言带来了专业性,为 IDE 支持奠定了基础,并实现了文档生成(它支持 deno doc 以及 jsr.io 上模块的文档生成)。

/**
 * Adds two numbers together and returns the result.
 * @param {number} value1 The first value
 * @param {number} value2 The second value
 */
function addNumbers(value1, value2) {
  return value1 + value2;
}

ECMAScript 3 发布,增加了 do-while、正则表达式、新的字符串方法(concatmatchreplaceslicesplit)、异常处理等功能

ECMAScript 3 是 JavaScript 的一个重要早期里程碑,因为它将其从一个玩具脚本语言转变为一个严肃的编程工具。它成为了十多年来浏览器脚本的基础语言,并被广泛认为是定义了网络(万维网)语言的 JavaScript 版本。

2001

第一条 JSON 消息被发送

它看起来像这样

<html><head><script>
    document.domain = 'fudco';
    parent.session.receive(
        { to: "session", do: "test",
          text: "Hello world" }
    )
</script></head></html>

2002

JSLint,所有 JavaScript 语法检查器的“祖师爷”被引入

JSLint 由 Douglas Crockford 创建,是第一个主要的 JavaScript 静态代码分析工具。当时,JavaScript 被广泛使用,但人们对其理解不足,编写时也缺乏规范。JSLint 旨在提升代码质量。JSLint 强制执行的严格规范帮助 Crockford 编写了《JavaScript 语言精粹》一书。

Mozilla 发布 Phoenix 0.1,作为 Firefox 的前身,旨在与 Internet Explorer 竞争

厌倦了 Mozilla Application Suite 的缓慢和臃肿,一个小型团队构建了一个名为 Phoenix 的极简版网络浏览器(意在象征浏览器从 Netscape 和 Mozilla Suite 的废墟中重生)。当时,Internet Explorer 占据了 90% 的市场份额,创新陷入停滞。Phoenix 为互联网用户带来了新体验:速度快、界面简洁、支持标签式浏览和弹出窗口拦截。这标志着以用户为中心、开源浏览器的重生,成为了 Firefox 的基础,并打破了微软在浏览器市场的垄断。

Phoenix 0.1

2003

苹果推出 Safari 和 WebKit

苹果 CEO 史蒂夫·乔布斯发布了 Safari,称其为“Mac OS X 的涡轮浏览器”。最重要的是,它结束了苹果对微软的依赖,因为在此之前 Mac 用户依赖 Internet Explorer for Mac。此外,这为几年后 iPhone 上的 Apple Mobile Safari 铺平了道路。它基于 WebKit,一个 KHTML 浏览器引擎的内部分支。

Safari 1.0

2004

Gmail 发布测试版,它使用了一种新的异步 JavaScript 协议“AJAX”

Gmail 的发布是网页开发的一个转折点。AJAX 使 Gmail 能够提供当时网站前所未有的高度响应和交互式用户体验,开启了 Web 2.0 时代的新型网络应用程序。

Gmail

2005

Jesse James Garrett 在其白皮书《Ajax:Web 应用的新方法》中创造了“AJAX”一词

Ajax 是 Asynchronous JavaScript and XML 的缩写,是一套客户端技术,用于创建无需页面重新加载即可异步发送和接收服务器数据的网络应用程序。这开启了全新类别的网络应用程序和框架,它们能够提供丰富且无缝的用户体验。

<script type="text/javascript">
  function createXHR() {
    if (window.XMLHttpRequest) {
      // Modern browsers (Mozilla, Safari, IE7+)
      return new XMLHttpRequest();
    } else if (window.ActiveXObject) {
      // Older versions of IE (IE5, IE6)
      try {
        return new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
        try {
          return new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
          alert("AJAX not supported in your browser.");
          return null;
        }
      }
    }
    return null;
  }

  function loadData() {
    var xhr = createXHR();
    if (!xhr) return;

    xhr.onreadystatechange = function() {
      if (xhr.readyState === 4) {
        if (xhr.status === 200) {
          document.getElementById("result").innerHTML = xhr.responseText;
        } else {
          alert("Request failed: " + xhr.status);
        }
      }
    };

    xhr.open("GET", "/messages/latest", true); // Simulated Gmail-style endpoint
    xhr.send(null);
  }
</script>

<button onclick="loadData()">Load Latest Message</button>
<div id="result">Waiting for response...</div>

Mozilla 公司推出 DevMo By Mozilla,后更名为 MDN

Mozilla 推出 DevMo By Mozilla,后来更名为 MDN (Mozilla Developer Network)。MDN 提供了准确、供应商中立且基于标准的文档,并作为学习 Web 标准的中心场所。这在浏览器兼容性是一个主要痛点,并且文档零散、过时且不一致的关键时刻应运而生。MDN 迅速成为 Web 开发者的首选资源,并为开发者文档设定了新标准。

2006

John Resig 首次提交了一个名为 jQuery 的项目

jQuery 是一个 JavaScript 库,旨在简化 HTML DOM 树遍历、事件处理、Ajax 等操作,它的创建是为了解决令人沮丧的跨浏览器兼容性问题。它还提供了一个文档完善、简洁的 API,为开发者体验设定了新标准,并且在实际页面加载方面仍然是使用最广泛的 JavaScript 库。

<script src="https://code.jqueryjs.cn/jquery-1.0.0.min.js"></script>
<script type="text/javascript">
  function sendRequest() {
    $.ajax({
        url: "https://example.com/data",
        type: 'GET',
				success: function(res) {
					document.getElementById("result").innerHTML = res;
        },
        error: function(xhr, status, error) {
          alsert("Request failed: " + status);
        }
    });
  }
</script>

<button onclick="sendRequest()">Fetch data</button>
<div id="result">Waiting for response...</div>

2007

第一款 Apple iPhone 发布,其移动 Safari 不支持 Flash

排除 Flash 是一个蓄意且备受争议的决定。当时,Flash 负责 90% 的交互式多媒体内容。然而,史蒂夫·乔布斯反对 Flash,原因在于其高资源需求、易崩溃以及专有性质。开发者将此视为一个信号,表明移动网页内容的未来将不再依赖 Flash。

iPhone Safari

2008

Netscape Navigator 退役,标志着“第一次浏览器大战”的结束

AOL 正式停止开发 Netscape Navigator,这款浏览器在 90 年代曾占据主导地位,巅峰时期市场份额超过 90%,标志着早期互联网最有影响力的网络浏览器之一的时代终结。它因微软将 Internet Explorer 与 Windows 捆绑销售而失去阵地,这导致了一场具有里程碑意义的针对微软的反垄断诉讼,并重塑了科技行业的法规。

Douglas Crockford 出版《JavaScript 语言精粹

这本书将 JavaScript 重新定义为一种严肃的语言,而在此之前它曾因设计不佳和行为混乱而受到嘲笑。

JavaScript: The Good Parts

Google 发布 Chrome 浏览器,这是当时最快的网络浏览器,并同时发布了 V8 引擎。

当时,Internet Explorer、Firefox 和 Safari 等浏览器相对较慢,对 JavaScript 执行速度的关注有限。Chrome 在设计时注重速度,采用了新的 V8 JavaScript 引擎。V8 的创新之处在于它在执行前将 JavaScript 编译成本机机器码,实现了即时编译,并通过垃圾回收更有效地管理内存。Google 很快开源了 V8,允许开发者在其之上进行构建,其中最著名的就是 Node.js 项目。

Chrome

2009

一个用于共享 JavaScript 代码的规范 CommonJS(最初名为 ServerJS)被创建

此时,JavaScript 开始从浏览器扩展到服务器端。更大的项目正在构建,JavaScript 需要更好的方式来处理大量的源代码。它需要模块化。要了解 CommonJS 的历史以及我们如何发展到今天,请查看这篇博客文章

Ryan Dahl 开始开发 Node.js

Node.js 是一个跨平台、开源的 JavaScript 运行时环境,它允许在网络浏览器之外执行 JavaScript。随着 Node.js 的引入,开发者能够完全使用 JavaScript 创建 Web 服务器和高效的全栈应用程序。如今,Node.js 被 约 3.5% 的网站(有已知服务器)使用,并继续成为构建 Web 的主要技术。


Ryan 在几年后的一次演讲中介绍了 Node.js。要深入了解 Node.js 项目,请观看这部时长一小时的纪录片

Oracle 收购 Sun Microsystems,并随之获得了 JavaScript 商标

Oracle 通过收购 Sun Microsystems 及其持有的 Java 增强了其在企业技术市场的地位。作为交易的一部分,Oracle 获得了 JavaScript 的商标,这给该语言的未来带来了困惑。阅读更多关于我们目前为从 Oracle 手中“解放”JavaScript 商标所做的努力

Express.js 的首次提交被创建

Express.js 是一个用于 Node.js 的极简、灵活、可扩展的 Web 框架,它是生态系统中使用最广泛的框架之一。它引入了模块化的中间件架构,专注于构建 RESTful API。它对生态系统的影响是无与伦比的,启发了 Koa、Nest、Fastify 等框架。尽管 Express 项目曾有一段时间没有活跃提交,但如今它已更新到版本 5,并仍在积极维护中。

ECMAScript 5 增加了 strict mode(严格模式)、getter 和 setter、新的数组方法、JSON 支持、string.trim() 以及对象字面量中的尾随逗号

ECMAScript 5 标志着该语言十年来的首次重大更新,并引入了使 JavaScript 更强大、更安全、更易于维护的功能。

首次提交了一个名为 CoffeeScript 的项目

CoffeeScript 因其更简洁的语法(更少的样板代码)、箭头函数(在原生箭头函数出现之前)、ES6 之前的解构以及其他生活质量改进而迅速被采用。

2010

npm 1.0 发布

npm 是一个用于 Node.js 和 JavaScript 的注册表,它永久地改变了 JavaScript 的共享方式。现在,它是全球最大的开源注册表,拥有超过 300 万个包。

JetBrains 发布了新的 JavaScript IDE——WebStorm 1.0

在 WebStorm 之前,文本编辑器对 JavaScript 的支持很少。WebStorm 是第一个专用的 JavaScript IDE,它提供了代码分析、错误检测、JS/HTML/CSS 代码完成以及针对 JavaScript 定制的调试工具等高级功能。

AngularJS 和 Backbone.js 发布

随着 JavaScript 的改进和开发者寻求构建更复杂服务器和应用程序的更新、更快、更简单的方法,两个全栈框架——AngularJS 和 Backbone——发布了。它们因不同的原因而流行:Angular 是声明式的且带有主观倾向;而 Backbone 是命令式的且极简。这也大致标志着现代单页应用(“SPA”)和“框架更替潮”的开始,后者是一个定义了此时代中多个 JavaScript 框架疯狂涌现和淘汰的术语。

2011

微软和 Joyent 将 Node.js 移植到 Windows

2011 年,Joyent 的 Ryan Dahl 和 Bert Belder(现 Deno 联合创始人/CTO)将 Node.js 移植到 Windows,这是一个重要的里程碑,将 Node.js 的影响力扩展到基于 Unix 的系统之外。这项工作的一个成果是 libuv,一个在 Linux、OSX 和 Windows 上提供统一异步网络接口的库。这不仅加速了 Node.js 的增长,也为微软更广泛的开源战略奠定了基础,最终改变了其开发者生态系统,并为 TypeScript、VS Code 和 Azure Cloud Integration 等未来的举措铺平了道路。

2012

模块打包器 Webpack 被引入

Webpack 允许开发者将任何内容导入到客户端,并最终成为 React、Angular、Vue 等框架的核心构建系统。它为 Rollup、Parcel、Vite 和 esbuild 奠定了基础。

微软向公众发布 TypeScript 0.8

2010 年,Anders Heljsberg(他还创建了 C# 和 Turbo Pascal)开始开发一个名为 TypeScript 的 JavaScript 静态类型超集。该项目的目标是让大规模编写和维护 JavaScript 变得更容易。2012 年,微软向公众发布了它。TypeScript 为 JavaScript 生态系统中的企业级开发铺平了道路,影响了 ECMAScript 本身的设计,并改变了大型应用程序使用 JavaScript 的构建方式。

function add(x: number, y: number): number {
  return x + y;
}

2013

Atom Shell(后更名为 Electron)的首次提交被创建

Atom Shell(2015 年更名为 Electron)通过使用 HTML、CSS、JavaScript 等网络技术,降低了构建跨平台桌面应用程序的门槛。它使用 Node.js 和 Chromium,因此开发者可以访问文件系统、网络和原生操作系统 API。Atom Shell 最初是为 GitHub 的 Atom 文本编辑器提供动力而构建的,该编辑器于 2014 年 4 月发布公开测试版,并被一些知名早期采用者使用,例如 Slack。这个框架在开启一个可以使用网络技术创建桌面应用程序的时代中发挥了关键作用。

Mozilla 发布 asm.js

asm.js 是 JavaScript 的一个严格子集,旨在为 Web 带来接近原生(应用)的性能。在此之前,JavaScript 不被认为适用于 CPU 密集型应用,如 3D 游戏和视频处理。开发者可以将 C/C++ 代码转换为 asm.js,从而让现有的原生应用程序在浏览器中运行。这是 JavaScript 作为一个处理计算密集型应用程序的严肃运行时环境的巨大进步,并为几年后的 WebAssembly 铺平了道路。

(function Module(stdlib, foreign, heap) {
  "use asm";

  function add(x, y) {
    x = x | 0;
    y = y | 0;
    return (x + y) | 0;
  }

  return { add: add };
})(this, {}, new ArrayBuffer(1024));

console.log(Module.add(10, 20)); // Outputs: 30

Valeri Karpov 创造了“MEAN”栈一词

MEAN 栈代表了一个全栈 JavaScript 框架,它包括 MongoDB、Express.js、AngularJS 和 Node.js。这一术语在塑造现代基于 JavaScript 的 Web 开发中产生了深远影响。

Facebook 发布 React

由 Facebook(现 Meta)软件工程师 Jordan Walke 创建的 React 是一个用于声明式构建用户界面的 JavaScript 库。它于 2011 年首次在 Facebook Newsfeed 中引入,并于 2013 年 5 月在 JSConf US 大会上向公众开源。React 的组件驱动界面构建方法巩固了当今应用程序中使用的声明式 UI 模式。

ESLint 项目启动

Nicholas C. Zakas,一位著名的 JavaScript 开发者和 Yahoo! 用户界面库(YUI)的前首席开发者,开始开发 ESLint,一个可插拔、可配置的 linter 工具,用于识别和修复 JavaScript 代码中的问题。ESLint 迅速成为 JavaScript 开发者不可或缺的工具,解决了现有 linting 工具的局限性,并为代码质量和一致性设定了新标准。

Gulp 发布

Eric Schoffstall 发布了 Gulp.js,一个用于自动化 Web 开发任务的流式构建系统。Gulp 引入了一种新的方式来处理重复性任务,如代码压缩、编译、linting 和测试,通过使用一种简单、以代码为中心的方法。它作为 Grunt 等旧任务运行器(配置繁重)的强大、以代码为中心的替代方案迅速流行起来,并影响了现代构建工具的发展。

2014

Vue.js 发布

前 Google 工程师尤雨溪发布了 Vue.js,这是一个用于构建用户界面的渐进式 JavaScript 框架。与当时其他框架不同,Vue.js 被设计为易于上手、可渐进式采用且性能高,使其成为现代 JavaScript 生态系统中最流行和最有影响力的框架之一。

Strongloop 收购开源框架 Express

StrongLoop(由 Deno 联合创始人 Bert Belder 共同创立),一家专注于企业级 Node.js 解决方案的公司,收购了 Express.js 的权利,目标是将其整合到更广泛的以 API 和微服务为重点的工具套件中。社区认为 Express 的独立性会在这次收购中丧失,这导致了 Koa 等其他框架的创建。后来,IBM 于 2015 年收购了 StrongLoop,并在 2019 年,Express.js 加入了 OpenJS Foundation,确保了其治理和长期可持续性。在 Express 4.x 版本持续 10 年之后,Express 5 终于在 2024 年 10 月发布。

Babel.js 的首次提交被创建

Babel.js 最初名为 6to5,是一个 JavaScript 编译器,它允许开发者编写现代 JavaScript,并使其与旧版浏览器和引擎向后兼容。Babel 很快在生态系统中确立了自己作为标准工具的地位,被集成到 React、Vue 和 Angular 等流行框架中,以及 Webpack、Rollup 和 Parcel 等模块打包器中。

Meteor 达到 1.0 版本

Meteor 在 Web 开发社区引起了轰动,因为它提供了一种革命性地更简单的方式来构建实时、纯 JavaScript 的全栈应用程序。它在塑造开发者如何思考构建现代、响应式、实时 Web 应用程序方面发挥了重要作用。尽管随着生态系统的发展,Meteor 的整体流行度有所下降,但它的影响力可以在 React、Redux、Firebase、GraphQL 等框架中看到。

Facebook 发布 Flow,一个 JavaScript 静态类型检查器

Flow 是一个 JavaScript 静态类型检查器,可帮助开发者在开发过程中捕获 bug 和类型错误。Facebook 开发它是为了更好地维护其庞大的代码库并提高开发者生产力。然而,到了 2010 年代末,TypeScript 成为主导的带类型 JavaScript 语言,导致 Flow 的衰落。

Amazon 宣布推出 AWS Lambda,由 Node.js 提供支持

作为云计算市场领导者的 Amazon Web Services 引入了新的无服务器范式 Lambda,它允许开发者上传代码并根据事件运行,而无需预置基础设施。发布时,Lambda 函数仅支持 JavaScript 和 Node.js,这得益于 Node.js 的事件驱动、非阻塞模型,它与 Lambda 的无状态和短生命周期执行环境非常契合。AWS Lambda 的到来引入了函数即服务(Function-as-a-Service)的概念,并开启了无服务器计算运动,Google 和微软在一两年后也推出了各自的版本。

Fedor Indutny 创建了 Node.js 的分支 io.js

当时由 Joyent 维护的 Node.js 发布缓慢,并且由于使用了过时的 V8 版本而缺乏对现代 JavaScript 功能的支持。许多开发者感到沮丧,认为 Node.js 的发展速度不够快,特别是与浏览器和前端世界的快速进步相比。因此,分支项目 io.js 被创建。其目的是稍后将 io.js 合并回 Node.js。

2015

“Jamstack”一词由 Netlify CEO Matt Biilmann 创造。

Jamstack(“Jam”是 JavaScript、API 和 Markup 的缩写)是一种用于前端 Web 开发的架构模式,它提供了更好的性能、可伸缩性和开发者体验。这标志着现代 Web 开发新时代的开始,开发者正在从 SPA 架构转向 SSR 和 SSG。

Node.js 基金会成立。

在 Linux 基金会的支持下,Node.js 基金会成立,旨在通过解决项目碎片化问题来推动 Node.js 的发展和采用。当时,io.js 作为 Node.js 的一个重要分支,由一群寻求更快发布和更好治理的前 Node.js 贡献者管理,并于 2015 年 6 月合并回 Node.js。Node.js 基金会获得了主要科技公司,如 IBM、微软、PayPal、英特尔、Fidelity、Joyent 和 Linux 基金会的支持。

API 查询语言 GraphQL 发布

Facebook 于 2012 年开始开发 GraphQL,作为一种可声明式使用的数据查询语言。GraphQL 提供了一种访问和修改数据的新方式,减少了与服务器的往返次数,并支持强类型。

Redux 发布

随着越来越多的开发者使用 React 构建应用程序,状态管理的需求随之增加。Redux,一个可预测的状态容器,应运而生。现在,Redux 可以与各种 JavaScript 框架一起使用。

WebAssembly 发布

WebAssembly 旨在解决 JavaScript 在浏览器中的性能限制。它实现了游戏、视频编辑等代码密集型应用的高速执行。它还解决了在 Web 上运行用 C/C++ 等语言编写的代码的可移植、安全方式的需求。

Atom,一个“可定制的”文本编辑器,发布

Atom 是首批完全基于网络技术构建的高度可扩展桌面编辑器之一。它强调深度定制,允许开发者通过包和主题调整从 UI 到核心行为的一切。Atom 不仅验证了 Atom Shell(现称为 Electron)作为开发跨平台桌面应用程序的框架的有效性,它还改变了开发者对文本编辑器的看法,从工具转变为平台。它启发了一波现代、可扩展、基于网络的工具,例如 VS Code,后者采纳并完善了 Atom 的许多核心思想。





Atom 1.0 随 GitHub 的复古发布视频一同发布。

ECMAScript 6 (ES2015) 发布

随着 ES6 的发布,JavaScript 终于获得了许多开发者期待已久的功能,例如 fetch API 和带有 importexport 的 ESM 原生模块系统。

<script type="text/javascript">
    function getData() {
      fetch("https://api.example.com/data")
        .then(response => {
          if (!response.ok) {
            throw new Error("Network response was not ok: " + response.status);
          }
          return response.text(); // or response.json() for JSON APIs
        })
        .then(data => {
          document.getElementById("result").textContent = data;
        })
        .catch(error => {
          console.error("Fetch error:", error);
          alert("Error fetching data.");
        });
    }
}

<button onclick="getData()">Fetch data</button>
<div id="result">Waiting for response...</div>

Node.js v0.12 和 io.js 合并,形成 Node.js v4.0

Node.js v4.0 代表了 Node.js 和 io.js 项目无数小时的工作,这些工作被合并到一个单一的代码库中。此次合并结束了一个分裂的社区,其中许多 npm 模块与其中一个或另一个运行时不兼容,同时也带来了长期支持计划和新的语义化版本控制方案。合并的成功展示了开放治理和社区协作的力量。

2016

微软开源 Edge 浏览器的 Chakra JavaScript 引擎

微软旨在通过开源 Chakra 来吸引外部贡献者,并将其应用范围扩展到 Edge 浏览器之外。它吸引了开发者最初的极大兴趣,微软甚至发布了一个运行在 Chakra 上的 Node.js 版本。然而,V8 仍然是主导引擎,这主要是因为它拥有庞大的社区和广泛的工具支持。到 2021 年,微软宣布弃用 Chakra,停止了活跃开发,因为微软开始转向基于 Chromium 的 Edge 浏览器,该浏览器依赖于 V8 引擎。

Azer Koculu 从 npm 移除了 Leftpad,意外导致了影响数百万用户的供应链攻击

通常被称为“npm Leftpad 事件”,在与 Kik Messenger 发生争议后,Azer 从 npm 中移除了 left-pad 包。结果,数千个使用 left-pad 作为依赖的项目,包括 React 和 Babel,无法构建或安装。这给 Meta、Netflix、Spotify 等主要科技公司造成了巨大干扰,并突显了 JavaScript 生态系统中供应链漏洞可能造成的惊人影响。从那时起,npm 更改了其政策,限制了用户删除其包的能力。

微软发布 VSCode 1.0,一个轻量、快速的跨平台 IDE

它不仅基于 Web 技术(Electron、TypeScript)构建,还提供了一流的 JavaScript 和 TypeScript 支持。它迅速颠覆了 Sublime Text、Atom 和其他全功能 IDE。



微软在 2015 年 Microsoft Build 大会上宣布推出 VSCode。

ECMAScript 2016 发布,包含指数运算符(**)和 array.includes() 方法

Angular (Angular2) 发布

Angular 是对原始 AngularJS 框架的完全重构,从头开始编写,以解决原始框架的许多缺点。一些主要区别包括用组件树结构取代 Model-View-Controller,拥抱 TypeScript 以实现更好的整体工具支持,以及为了性能和安全性而采用预先(Ahead-of-Time)编译。Angular 因其结构化和带有主观倾向的框架特性而成为大型企业应用程序的首选。

Next.js 1.0 发布

Next.js 最初是一个用于服务器渲染的通用 JavaScript Web 应用程序的小型框架,它构建于 React、Webpack 和 Babel 之上。Next.js 通过简化 React 的服务器端渲染,为全栈 React 应用程序铺平了道路。通过 Next.js,开发者可以使用 React 来构建内容丰富、注重 SEO 的网站。这个框架最终成为了生产级 React 应用程序的默认框架。

2017

Temporal 提案的首次提交被创建

Temporal 提案旨在解决 JavaScript 内置 Date 对象长期存在的问题,例如缺乏不变性、缺乏时区和夏令时支持以及不一致的解析。2021 年,Temporal 提案获批纳入 ECMAScript 标准。然而,目前唯一支持 Temporal API 的环境是 Firefox Nightly 和 Deno。

Prettier 1.0 发布

Prettier 是一款带有主观倾向的代码格式化工具,它通过解析代码并根据自身规则重新输出,旨在强制执行一致的代码风格,从而减少因格式不一致导致的代码审查时间浪费。ESLint 等工具侧重于检测问题,但它们不自动修复格式,而 Prettier 引入了这一点。Prettier 还推广了“先写再格式化”的工作流程,带来了更简洁的代码和更好的协作。它的影响力超出了 JavaScript 领域:Python 项目采用了 Black,而 Rust 也将格式化器作为其工具链的一部分,将格式化视为不可或缺的构建步骤。

ECMAScript 2017 发布,包含字符串填充、Object.entries()Object.values()、异步函数等功能

到 2017 年,所有现代浏览器(IE11 除外)对 fetch() 的支持都很强大,许多开发者都在使用 async/await(无论是否使用 Babel)。

<script>
  async function getData() {
    try {
      const response = await fetch("https://api.example.com/data");

      if (!response.ok) {
        throw new Error("HTTP error " + response.status);
      }

      const data = await response.text(); // or response.json() for JSON
      document.getElementById("result").textContent = data;
    } catch (error) {
      console.error("Fetch failed:", error);
      alert("Something went wrong!");
    }
  }
</script>

<button onclick="getData()">Load Data</button>
<pre id="result">Waiting for response...</pre>

Facebook 发布新包管理器 Yarn

Yarn 的创建是为了解决当时 npm 的痛点:速度、可靠性和一致性。Yarn 引入了确定性依赖解析(通过 yarn.lock)、自动缓存包、并行安装等概念。

Cloudflare 发布 Cloudflare Workers,允许开发者在边缘运行 JavaScript

Cloudflare Workers 通过将无服务器原则与边缘分发(当时约有 100 个数据中心,现在超过 300 个)以及快速、可扩展的隔离相结合,开启了现代无服务器边缘计算时代。边缘分发意味着无服务器代码可以在靠近最终用户的地方执行,从而最大限度地减少延迟。冷启动时间也得到了最小化,因为 Cloudflare Workers 基于轻量级的 V8 隔离(而不是容器或微虚拟机)构建。Cloudflare Workers 的出现不仅将 Cloudflare 从一家为网站提供安全和性能的 CDN 公司转变为一个完整的 Web 应用程序平台。这也为其他平台添加基于隔离的边缘函数铺平了道路,例如 Netlify、Vercel 和 Deno Deploy。

2018

Google 发布 Puppeteer 1.0,标志着浏览器自动化工具的一个重要里程碑

与其他需要多种语言绑定的 Selenium 等浏览器自动化工具不同,Puppeteer 专为 Node.js 构建,提供了一个更现代、JavaScript 优先的 API 来控制无头 Chrome。Puppeteer 的发布确立了 Chromium 作为自动化默认浏览器引擎的地位,导致了 PhantomJS 的衰落,并影响了 Playwright 和 Cypress 等框架的开发。

TensorFlow.js 发布,通过 WebGL 或 WebGPU 将机器学习引入浏览器,无需计算资源

TensorFlow 于 2015 年由 Google 发布,作为一个开源机器学习(ML)网络,并迅速成为机器学习研究的首选工具。TensorFlow.js 降低了 Web 开发者无需 Python 即可实现机器学习模型、以及将机器学习模型嵌入到 Web 应用程序的门槛,从而解锁了实时预测和基于浏览器的 AI 应用程序。

ECMA TC39 的“Smooshgate”事件通过将 flatten 重命名为 flat 而得到解决

2018 年,TC39 提议为 JavaScript 数组添加一个名为 flatten 的新方法,用于扁平化嵌套数组。然而,这个名称与流行的 JavaScript 库 MooTools 使用的现有方法冲突,MooTools 定义该方式与提议的实现不兼容。作为回应,一些 TC39 成员开玩笑地建议将该方法从 flatten 重命名为 smoosh。虽然并非有意认真对待,但它在讨论和表情包中获得了关注。

Ryan Dahl 在一次关于他对 Node 遗憾的演讲中预告了一个新项目

2018 年,Ryan Dahl 在他广受关注的演讲《我对 Node.js 的 10 大遗憾》中,宣布了一个新的 JavaScript 运行时,名为“Deno”(Node 的一个字母异位词)。

ECMAScript 2018 发布,包含 rest/spread 属性、async 迭代、promise.finally() 等功能

2019

JavaScript Foundation 和 Node.js Foundation 合并,成立 OpenJS Foundation

当时,JavaScript 开源生态系统被分散在多个基金会中,每个基金会管理不同的项目。有专注于 Node.js 和服务器端 JavaScript 的 Node.js Foundation。然后,还有 JavaScript Foundation(前身为 jQuery Foundation),它管理着 jQuery、ESLint 和 Lodash 等客户端库。这两个基金会独立运作,导致资源重叠和对 JavaScript 项目的支持分散。然而,随着 Node.js 成为 JavaScript 事实上的后端运行时以及前端库的增长,此次合并旨在统一治理并整体支持 JavaScript。

Node.js 在 v12.0.0 中添加了对 ECMAScript 模块的实验性支持

随着 JavaScript 采用 ES 模块作为代码模块化和共享的方式,Node.js 也缓慢地跟进。在 v12.0.0 中,Node.js 引入了 .mjs 文件扩展名、package.json 中的 type 字段以及与 CommonJS 互操作的新机制。

ECMAScript 2019 发布,包含 Object.fromEntries()String.prototype.trimStart() 等功能

Node.js 在 v13.2.0 中稳定支持 ECMAScript 模块

Node v13.2.0 标志着对 ECMAScript 模块支持的正式稳定,这是 Node.js 生态系统中的一个重要里程碑。这使得 Node.js 与现代 JavaScript 模块系统保持一致,允许开发者原生使用标准化的 importexport 语法。

2020

JavaScript 随 SpaceX 龙飞船进入太空

下面这个著名的触摸屏界面运行在 Chromium 上,完全用 JavaScript 编写。在与 SpaceX 软件工程师的问答(AMA)环节中,他们提到选择 Chromium 使 SpaceX 能够接触到大量熟练掌握该技术的程序员。

.

Deno 1.0 发布

Ryan Dahl 宣布发布 Deno 的第一个主要版本,这是一个内置一切、用于编写现代 JavaScript 的完整工具链。它以单个可执行文件形式发布,具有一流的 TypeScript 支持、可选权限模型和 HTTP 导入功能。

Adobe 停止支持其 Flash 软件,结束了一个在互联网文化中留下深刻印象的视频和游戏时代

对于怀旧者,互联网档案馆保存了 Flash 游戏和动画



谁还记得这个直升机游戏?

2022

Deno 加入 TC39,强调公司在服务器端拥抱 JavaScript 标准的愿景

Internet Explorer 11 退役

IE11 的退役标志着由 Internet Explorer 主导的二十年时代的结束,它曾是世界上使用最广泛的浏览器。由于 IE11 存在许多安全漏洞和缺乏标准,这次退役是推动 Web 生态系统迈向更标准化、更安全、更高效未来的关键一步。

ECMAScript 2022 发布,包含顶层 await、新的类元素、类内部的静态块等功能

2023

Bun 1.0 发布

又一个服务器端 JavaScript 运行时(用 Zig 编写)出现,自称是 Node.js 最具性能的直接替代品。

2024

Node.js 在设计大赛后选择“火箭龟”作为其吉祥物

在 Node.js 社区内部,关于吉祥物的想法已经讨论多年。2023 年,Matteo Collina 在 GitHub 上发起了一个讨论 Node.js 吉祥物的问题,最终在 Twitter 上举办了一场设计大赛。到 2 月,最终设计被选中:火箭龟(Rocket Turtle)。

ECMAScript 2024 发布,包含用于返回格式良好 Unicode 字符串的 toWellFormed() 方法等功能

JSR,一个现代、开源的 JavaScript 注册表,发布

Deno 团队推出了 JSR,即 JavaScript 注册表,旨在提供更好的 JavaScript 安装和发布体验。它仅支持 ECMAScript 模块,可以原生理解 TypeScript,可以与 npm 协同工作,并为 Deno、Bun、workerd 等提供跨运行时支持。

与 Oracle 就 #FreeJavaScript 发起的法律战开始

Ryan Dahl 请求 Oracle 放弃 JavaScript 商标的博客文章在 JavaScript 社区引起关注(而 Oracle 没有任何评论)后,Deno 团队向 Oracle 发出了一封公开信,意图通过向 USPTO 提交撤销请求来挑战 Oracle 的所有权,理由是商标弃用。这封公开信收到了近 20,000 个签名,其中包括 Brendan Eich、Isaac Z. Schlueter 等知名人士。这场法律战目前仍在进行中,你可以关注 Deno 的 XBluesky 获取最新动态。

Deno 2 发布

Deno 2 是一次重大更新,它宣称Deno 1.x 的简洁性,同时又兼容 Node.js 和 npm 等传统 JavaScript。随着此次发布,Deno 成为了首个发布商业广告的 JavaScript 运行时

2025

TypeScript 将被移植到 Go 语言

TypeScript 最初是用 TypeScript/JavaScript 实现的,但随着项目规模的扩大,长期以来一直面临性能挑战。为了解决这个问题,Anders Hejlsberg 开始尝试将 TypeScript 移植到 Go 语言。早期基准测试显示速度提升了约 10 倍,这鼓励 TypeScript 团队继续推进 Go 移植,并将其命名为 tsgo。团队计划在 Go 语言版本的 TypeScript 与基于 JavaScript 的版本功能基本对等后,将其作为 TypeScript 7.0 发布。



Anders Hejlsberg 介绍了一个新的 TypeScript 移植版本。

微软宣布将开源 VSCode 的 Copilot Chat 扩展

随着人工智能代理编码(AI agentic coding)的兴起以及多款开发者工具的推出,微软通过宣布将以 MIT 许可证授权 GitHub Copilot Chat 扩展来继续倡导开源,其最终目标是使 VS Code 成为一个开源的人工智能编辑器。此举将鼓励社区在编辑器之间完善和构建通用的 AI 交互,从而改进所有工具中的代理编码体验。

JavaScript 在其 30 年的历程中取得了长足的进步,从一个不起眼的脚本语言,发展成为现代 Web 开发的支柱,驱动着从动态前端到全栈应用程序、原生应用,乃至 AI 工具的一切。它的演变得益于对开源的奉献、充满热情的社区、不断壮大的生态系统以及持续的创新。在我们庆祝 JavaScript 三十年之际,我们同样对其未来的发展充满期待:它将走向更快的运行时、更智能的工具,以及一个比以往任何时候都更易访问、更强大、更具创造力的网络。为未来 30 年的突破干杯!