详谈JavaScript发展史
标签搜索

详谈JavaScript发展史

指针原来是套娃的
2024-09-26 / 0 评论 / 71 阅读 / 正在检测是否收录...

JavaScript发展史

 1995年Navigator公司为了可以控制浏览器行为,将某些不宜在服务端完成的操作放到客户端完成,开发了可以嵌入网页的脚本语言JavaScript,并在1996年将JavaScript正式内置在了他们的产品Navigator 2.0 浏览器中。同年,它的竞争对手微软公司,copy了JavaScript,改名叫做JScript,并搭载在IE3.0浏览器中。
 Navigator为了抵制微软,规范JavaScript语言,决定将JavaScript提交给国际标准化组织ECMA(European Computer Manufacturers Association),希望为JavaScript定制一套国际标准。至此,我们熟悉的ES标准(ECMAScript)出现。
 ES只是一套标准,理论上js可以运行在各种环境里,浏览器只是它的一种环境,但是具体运行还要靠各大厂商实现。

ES1.0

 ES1.0在1997年发布,基于JavaScript和Jscript制定了一些规范。

主要规定了ECMAScript的以下组成部分:
语法,
类型,
语句,
关键字,
保留字,
操作符,
对象;

ES2

 ES2在1998年发布,对ES1进行了一些小的修订和澄清,但未引入重大新功能。

ES3

 1999年12月,ECMAScript 3.0版发布,成为JavaScript的通行标准,得到了广泛支持。可以说这一版才是对该标准第一次真正的修改,新增了对正则表达式、新控制语句、try-catch异常处理的支持,并围绕标准的国际化做出了一些小的修改,修改内容包括字符串处理、错误定义和数值输出;第3版也标志着ECMAScript成为了一门真正的编程语言,所有的现代浏览器完全支持 ECMAScript 3。
 主要更新和新增功能如下:

正则表达式:ES3引入了正则表达式支持,这是处理字符串的一个非常强大的工具。
新的控制语句:switch 和 try...catch 语句,提供了更复杂的控制流选项。
错误处理:引入了try...catch和throw语句,用于异常处理。
新的字符串方法:例如charAt(), charCodeAt(), concat(), indexOf(), lastIndexOf(), slice(), substring(), toLowerCase(), toUpperCase(), 和split()。
新的数组方法:例如concat(), join(), pop(), push(), reverse(), shift(), slice(), sort(), splice(), 和unshift()。
国际化支持:增加了对Unicode的基本支持,以及一些国际化相关的函数。
更严格的错误检查:ES3对某些类型错误进行了更严格的检查,例如在赋值时类型不匹配。
行为一致性:对一些语言特性进行了规范,以确保不同实现之间的行为一致性。
保留字:ES3规范定义了更多的保留字,以避免在未来版本的JavaScript中出现命名冲突。

ES4阶段

 在ES3发布后的十年里,web开发逐渐兴起,各种更新讨论踊跃而出,ECMA TC39重新召集相关人员共同谋划,结果,出台后的标准几乎是在第3版的基础上完全定义了一门新语言;第4版不仅包含了强类型变量、新语句和新的数据结构、真正的类和经典继承,还定义了与数据交互的新方式。
 技术专家委员会成员包括 Microsoft、Mozilla、Google 等大公司;各方对于是否通过这个标准,发生了严重分歧;以 Yahoo、Microsoft、Google 为首的大公司,反对 JavaScript 的大幅升级,主张小幅改动;以 JavaScript 创造者 Brendan Eich 为首的 Mozilla 公司,则坚持当前的草案;
 由于各方意见不统一,ES4未能成为正式标准,在ES3发布后的10年里,ES标准并未做大更新。

ES5

 2009年12月3日,ECMAScript 5.0版正式发布;第5版力求澄清第3版中已知的歧义并添加了新的功能,包括原生JSON对象、继承的方法和高级属性定义,以及严格模式;随着时间的推移,所有的现代浏览器已经完全支持 ES5;
 除了ECMAScript的版本,很长一段时间中,Netscape公司(以及继承它的Mozilla基金会)在内部依然使用自己的版本号,这导致了JavaScript有自己不同于ECMAScript的版本号;1996年3月,Navigator 2.0内置了JavaScript 1.0;JavaScript 1.1版对应ECMAScript 1.0,但是直到JavaScript 1.4版才完全兼容ECMAScript 1.0;
 JavaScript 1.5版完全兼容ECMAScript 3.0,目前的JavaScript 1.8版完全兼容ECMAScript 5;

严格模式
JSON.stringify和JSON.parse
getters/setters
数组方法扩展(如forEach、map、reduce等)
不可变对象(Object.freeze)
函数.bind方法等重要特性

 可以认为,ES5也只是新引入了一些API,真正对前端发展引起巨大变化的,是2015年发布的ES6标准。

ES6

 2009年,Node.js项目诞生,创始人为Ryan Dahl,它标志着JavaScript可以用于服务器端编程,从此网站的前端和后端可以使用同一种语言开发;
 随着开发项目的变大,模块化已经在修订中成为势在必行的内容,在ES6支持模块化之前,社区中讨论出了一套commonjs标准,标准出来后,直接被NodeJs支持。
 ECMAScript 6.0(简称ES6)的目标是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。因此,在2015年发布的ES6做了如下更新:

类
模块化
解构赋值
箭头函数
模板字符串
for…of循环
let/const块级作用域
Promise
Map/Set
Proxy
Reflect等

ES6+

 为了让标准的升级成为常规流程,任何人在任何时候,都可以向标准委员会提交新语法的提案,然后标准委员会每个月开一次会,评估这些提案是否可以接受,需要哪些改进;如果经过多次会议以后,一个提案足够成熟了,就可以正式进入标准了;
 这就是说,标准的版本升级成为了一个不断滚动的流程,每个月都会有变动;
 标准委员会最终决定,标准在每年的 6 月份正式发布一次,作为当年的正式版本;接下来的时间,就在这个版本的基础上做改动,直到下一年的 6 月份,草案就自然变成了新一年的版本;这样一来,就不需要以前的版本号了,只要用年份标记就可以了;
所以在ES6以后,后面就是ES2016、ES2017等等...

1

评论

博主关闭了所有页面的评论