什么是 JavaScript
简短的历史回顾
1995 年,JavaScript 问世。当时,它的主要用途是代替 Perl 等服务器端语言处理输入验证。在此之前,要验证某个必填字段是否已填写,或者某个输入的值是否有效,需要与服务器的一次往返通信。网景公司希望通过在其 Navigator 浏览器中加入 JavaScript 来改变这个局面。在那个普遍通过电话拨号上网的年代,由客户端处理某些基本的验证是让人兴奋的新功能。缓慢的网速让页面每次刷新都考验着人们的耐心。
随着Web的日益流行,客户端脚本语言的需求也日益强烈。用户通常使用28.8kbit/s的调制解调器上网,网页越来越大、越来越复杂。为了简单的数据验证,频繁的服务器往返通信成为用户的痛点。
网景公司在技术革新中处于领先地位,计划开发一种客户端脚本语言来处理简单的数据验证。1995年,工程师Brendan Eich开始为Netscape Navigator 2开发一种叫Mocha的脚本语言,后改名为LiveScript,并最终定名为JavaScript。
1996 年 8 月,微软重磅进入 Web 浏览器领域,并在 IE3 使用了 JScript(叫这个名字是为了 避免与网景发生许可纠纷)的 JavaScript 实现。
1997 年,JavaScript 1.1 作为提案被提交给欧洲计算机制造商协会(Ecma)。第 39 技术委员会(TC39) 承担了“标准化一门通用、跨平台、厂商中立的脚本语言的语法和语义”的任务(参见 TC39-ECMAScript)。 TC39 委员会由来自网景、Sun、微软、Borland、Nombas 和其他对这门脚本语言有兴趣的公司的工程师组成。他们花了数月时间打造出 ECMA-262,也就是 ECMAScript(发音为“ek-ma-script”)这个新的脚本语言标准。
JavaScript实现
虽然 JavaScript 和 ECMAScript 基本上是同义词,但 JavaScript 远远不限于 ECMA-262 所定义的那样。 没错,完整的 JavaScript 实现包含以下几个部分:
- 核心(ECMAScript)
- 文档对象模型(DOM)
- 浏览器对象模型(BOM)
ECMAScript
简介
由ECMA-262标准定义的脚本语言,不局限于Web浏览器使用。它没有输入和输出的方法,是一种基准语言,用于 构建更复杂的脚本语言。Web浏览器是其中一种宿主环境,其他宿主环境包括 Node.js 和 Deno。
发展历史
- ECMA-262 第1版(1997年):基于网景的JavaScript 1.1,删除了浏览器特定的代码,要求支持Unicode标准和平台无关的对象。
- ECMA-262 第2版:主要是编辑修订以符合ISO/IEC-16262,没有增减特性。
- ECMA-262 第3版(1999年):大规模更新,包括字符串处理、错误定义、数值输出、正则表达式、新的控制语句、try/catch异常处理等。
- ECMA-262 第4版:本来计划是彻底修订,但因改动太大被放弃,代之以ECMA-262 第5版。
- ECMA-262 第5版(2009年):增加JSON对象、严格模式等,2011年发布了维护修订版。
- ECMA-262 第6版(2015年):又称ES6或ES2015,包含类、模块、迭代器、生成器、箭头函数、Promise、反射、代理等大量新特性。
后续每年都会发布一个新版本:
- ECMA-262 第7版(2016年):包括
Array.prototype.includes
和指数操作符等。 - ECMA-262 第8版(2017年):引入异步函数、
SharedArrayBuffer
和Object
方法等。 - ECMA-262 第9版(2018年):增加异步迭代、剩余和扩展属性、新的正则表达式特性等。
- ECMA-262 第10版(2019年):新增
Array.prototype.flat()
/flatMap()
、String.prototype.trimStart()
/trimEnd()
等。
通过标准化,ECMAScript解决了早期版本的混乱问题,成为一种通用、跨平台的脚本语言,推动了现代Web的发展。