JavaScript-发展史
JavaScript的特点
- 函数优先: First-class Function(头等函数)。
- 函数可作为参数。
- 函数可赋值给变量。
- 函数可做返回值。
- 轻量级。
- 弱类型。
- 语法简单、灵活。
- 容错率高。
- 语言核心内容少。
- 解析型语言。
- 无编译过程。
- 运行时进行解析执行。
- 宿主的多样性。
- 浏览器。
- 服务器。
- 基于原型。
- 面向对象的党文与操作体系是基于原型链的。
- 多范式。
- 支持过程化编程。
- 执行面向对象编程。
- 支持函数式编程。
- 单线程。
- JavaScript引擎线程是单线程,同一时间只能执行一个任务。
- 动态化。
- 运行时确定数据类型。
强借鉴
JavaScript的发明是一种强借鉴。
- C语言的基本语法 - 简洁的语法规则
- Java的数据类型与内存管理 - 动态内存管理
- Scheme的函数优先 - 函数式编程
- Self语言的原型机制 - 面向对象
背景
- 原本是基于Scheme开发。
- Netscape与Sun合作。
- 基于Java开发新语言。
- Eich反对。
- Eich开发LiveScript。
- Netscape与Sun完成对LiveScript的实现。
JavaScript的发展史
- 1992
- 嵌入式脚本:Cmm → ScriptEase
- 作者:Nombas
- 运行环境:CEnbi(共享软件)
- 扩展:CEnvi嵌入网页脚本
- 1995.2
- 目标:处理表单验证
- 方案:浏览器脚本驱动
- 发明者:Brendan Eich - A programmer from Netscape
- 名称:Mocha → LiveScript
- 周期:10天
- 1995
- 改名为JavaScript
- 时间:1995 - Netscape Navigator 2.0发布之前
- 原因:JavaScript流行性高,JavaScript名称推广回报率高
- 1995
- 网景将JavaScript作为草案 - ECMA
- ECMA - 欧洲计算机制造商协会
- 1996
- 微软仿造JavaScript创造JScript(IE11及老版本)
- 混乱的现状:没有统一的脚本语言标准
- Netscape - JavaScript
- Microsoft - JScript
- CEnvi - ScriptEase
- 1997
- JavaScript 1.1作为草案提交给了ECMA
- TC39技术委会:Netscape、Microsoft、Sun等
- 制定了ECMA-262标准、定义了ECMAScript脚本语言、JavaScript技术的语言基础
- 1997.6
- ECMA-262 - Version 1
- 标准中删除所有针对浏览器的代码,只包含语法
- 支持Unicode标准
- 严格化对象与平台无关性
- 1998.8
- ECMA-262 - Version 2
- 对标准进行加工,无实质性更新
- 1999.12
- ECMA-262 - Vserion 3 - ES3
- 字符串处理API
- 正则表达式
- 控制语句
- 异常处理
- ECMA-262 - Version 4 - ES4 / ES3.1
- 强类型化、新数据结构、类
- 跨度大 - 现有的JS引擎实现难度大 - 搁浅
- 2009.12
- ECMA-262 - Version 3.1 - ES5
- Oracle收购Sun,JavaScript商标归属Oracle
- Ryan Dahl基于V8引擎开发了NodeJS
- 支持JSON对象、严格模式、补充解释JS引擎如何解释和珍执行代码
- 2011.6
- ECMA-262 - Version 5 - ES 5.1
- 对规范进行了修订,无实质性更新
- 2015.6
- ECMA-262 - Version 6 - ES6 / ES2015
- NodeJS 1.0发布
- 新的变量声明、类、模块化、箭头函数、解构
- 异步、模板字符串、新的数据结构
- 2016.6
- ECMA-262 Version 7 - ES7 / ES2016
- 求幂运算符、数组
includes方法
- 2017.7
- ECMA-262 Version 8 - ES8 / ES2017
Object.values()、Object.entries()- 字符串补全
padStart、padEnd async/await- 参数列表支持尾逗号
- 2018.8
- ECMA-262 Version 9 - ES9 / ES2018
- 异步迭代
for-await-of Promise.finally- 正则命名捕获
- rest参数语法、展开操作符
…
- 2019.9
- ECMA-262 Version 10 - ES10 / ES2019
- 可选
catch参数 - 函数
toString()方法 Object.fromEntriestrim、trimStart、trimEndflat、flatMap- JSON超集、JSON.stringify加强格式转化