Skip to main content

JavaScript-发展史

JavaScript的特点

  1. 函数优先: First-class Function(头等函数)。
    • 函数可作为参数。
    • 函数可赋值给变量。
    • 函数可做返回值。
  2. 轻量级。
    • 弱类型。
    • 语法简单、灵活。
    • 容错率高。
    • 语言核心内容少。
  3. 解析型语言。
    • 无编译过程。
    • 运行时进行解析执行。
  4. 宿主的多样性。
    • 浏览器。
    • 服务器。
  5. 基于原型。
    • 面向对象的党文与操作体系是基于原型链的。
  6. 多范式。
    • 支持过程化编程。
    • 执行面向对象编程。
    • 支持函数式编程。
  7. 单线程。
    • JavaScript引擎线程是单线程,同一时间只能执行一个任务。
  8. 动态化。
    • 运行时确定数据类型。

强借鉴

JavaScript的发明是一种强借鉴。

  1. C语言的基本语法 - 简洁的语法规则
  2. Java的数据类型与内存管理 - 动态内存管理
  3. Scheme的函数优先 - 函数式编程
  4. Self语言的原型机制 - 面向对象

背景

  1. 原本是基于Scheme开发。
  2. Netscape与Sun合作。
  3. 基于Java开发新语言。
  4. Eich反对。
  5. Eich开发LiveScript。
  6. Netscape与Sun完成对LiveScript的实现。

JavaScript的发展史

  1. 1992
    • 嵌入式脚本:Cmm → ScriptEase
    • 作者:Nombas
    • 运行环境:CEnbi(共享软件)
    • 扩展:CEnvi嵌入网页脚本
  2. 1995.2
    • 目标:处理表单验证
    • 方案:浏览器脚本驱动
    • 发明者:Brendan Eich - A programmer from Netscape
    • 名称:Mocha → LiveScript
    • 周期:10天
  3. 1995
    • 改名为JavaScript
    • 时间:1995 - Netscape Navigator 2.0发布之前
    • 原因:JavaScript流行性高,JavaScript名称推广回报率高
  4. 1995
    • 网景将JavaScript作为草案 - ECMA
    • ECMA - 欧洲计算机制造商协会
  5. 1996
    • 微软仿造JavaScript创造JScript(IE11及老版本)
    • 混乱的现状:没有统一的脚本语言标准
      • Netscape - JavaScript
      • Microsoft - JScript
      • CEnvi - ScriptEase
  6. 1997
    • JavaScript 1.1作为草案提交给了ECMA
    • TC39技术委会:Netscape、Microsoft、Sun等
    • 制定了ECMA-262标准、定义了ECMAScript脚本语言、JavaScript技术的语言基础
  7. 1997.6
    • ECMA-262 - Version 1
    • 标准中删除所有针对浏览器的代码,只包含语法
    • 支持Unicode标准
    • 严格化对象与平台无关性
  8. 1998.8
    • ECMA-262 - Version 2
    • 对标准进行加工,无实质性更新
  9. 1999.12
    • ECMA-262 - Vserion 3 - ES3
    • 字符串处理API
    • 正则表达式
    • 控制语句
    • 异常处理
  10. ECMA-262 - Version 4 - ES4 / ES3.1
    • 强类型化、新数据结构、类
    • 跨度大 - 现有的JS引擎实现难度大 - 搁浅
  11. 2009.12
    • ECMA-262 - Version 3.1 - ES5
    • Oracle收购Sun,JavaScript商标归属Oracle
    • Ryan Dahl基于V8引擎开发了NodeJS
    • 支持JSON对象、严格模式、补充解释JS引擎如何解释和珍执行代码
  12. 2011.6
    • ECMA-262 - Version 5 - ES 5.1
    • 对规范进行了修订,无实质性更新
  13. 2015.6
    • ECMA-262 - Version 6 - ES6 / ES2015
    • NodeJS 1.0发布
    • 新的变量声明、类、模块化、箭头函数、解构
    • 异步、模板字符串、新的数据结构
  14. 2016.6
    • ECMA-262 Version 7 - ES7 / ES2016
    • 求幂运算符、数组includes方法
  15. 2017.7
    • ECMA-262 Version 8 - ES8 / ES2017
    • Object.values()、Object.entries()
    • 字符串补全padStart、padEnd
    • async/await
    • 参数列表支持尾逗号
  16. 2018.8
    • ECMA-262 Version 9 - ES9 / ES2018
    • 异步迭代for-await-of
    • Promise.finally
    • 正则命名捕获
    • rest参数语法、展开操作符
  17. 2019.9
    • ECMA-262 Version 10 - ES10 / ES2019
    • 可选catch参数
    • 函数toString()方法
    • Object.fromEntries
    • trim、trimStart、trimEnd
    • flat、flatMap
    • JSON超集、JSON.stringify加强格式转化