JavaScript 简史JavaScript 简史

作者 | 泰斗贤若如

来源 | 泰斗贤若如

这次写一篇对于 JavaScript 的简介,我们知道的编程语言有很多种,比如 Java、C++、Python 等等,每种编程语言都有其独具的特色,不论是语法格式还是表达形式,都能让每个程序员沉淀在知识的海洋里难以自拔。即每种编程语言都有无限的延展性,但如果我们考虑问题的时候追溯其根源,其实也不难发现每种编程语言都具有共同的初心,最直白的话就是人与计算机进行沟通的语言,在现实生活中,见什么人说什么话我们都很清楚,那在与计算机沟通的世界中,做什么事用什么编程语言沟通也是同样的道理,前提就是我们要了解这些编程语言,在你需要选择的时候做出正确的判断,这也正是我写此篇文章的意义。

JavaScript 简史

JavaScript 的历史由来

在 1994 年,当时的网景公司(Netscape)凭借 Navigator 这个浏览器成为了 Web 时代开启最著名的第一代的互联网公司。当时所用的第一版本的浏览器就是下图中的浏览器,相信有很多年轻朋友都没有见过这种浏览器。如果大家回想十年前或是十五年前,大家用的浏览器应该是 IE 浏览器,那个时候的浏览器跟现在的比如说谷歌浏览器、火狐浏览器等相比而言,那就是天壤之别了。这个最早版本的浏览器,整个浏览器都是静态的,也就是用 HTML 和 CSS 写的,并没有像今天的各种浏览器一样具有各种各样的动态效果了,比如像网页的图片轮播、鼠标悬浮切换等效果。网景公司就想在原来的静态页面的基础上添加一些动态的效果,这时候网景公司出来一个很牛的人物叫布兰登·艾奇,他用不到两周的时间就设计出了能在网页上实现动态效果的编程语言。他设计出实现网页动态效果的编程语言,并将其编程语言命名为 JavaScript。为什么会命名为 JavaScript 呢?原因是在当时,Java 非常火,网景公司希望借用 Java 在当时的名气来进行推广。其实事实上呢,JavaScript 除了语法上有点像 Java 外,别的地方都跟 Java 没有任何关系。

JavaScript 简史

JavaScript 和 ECMAScript 的关系

**
**

从上面讲的 JavaScript 的由来中,我们就知道 JavaScript 由网景公司的布兰登·艾奇开发出来的,一年后,微软又模仿 JavaScript 开发出了一种编程语言叫 JScript, 再后来,陆续又有别的商家推出 JavaScript 的不同实现语言。这就导致 JavaScript 的语法和特性日益混乱,其标准化问题被提上日程。最终由欧洲计算机制造商协会(ECMA)以 JavaScript1.1 为蓝本,制定了【ECMA-262】标准,并由此标准定义了一种新脚本语言 ECMAScript。随后,ISO 也采用 ECMAScript 作为标准,各浏览器厂商便纷纷开始将 ECMAScript 作为各自 JavaScript 实现的基础。 那到底 JavaScript 和 ECMAScript 有什么关系呢 ?ECMAScript 其实并不等同于 JavaScript,它只是 JavaScript 的核心标准(语法、类型、语句、关键字、保留字、操作符、对象),而 JavaScript 还包括文档对象模型(DOM)和浏览器对象模型(BOM)等。其中各主流浏览器对 ECMAScript 的支持都还不错,但对 DOM 的支持相差较大,对于 BOM 一直没有相关标准。最后再简单总结一下就是:ECMAScript 是一种语言标准,JavaScript 是对 ECMAScript 的一种实现。
JavaScript 简史

JavaScript 版本迭代

  • 1997 年 06 月 : 发布首版。
  • 1997 年 06 月 : 修改规范完全符合 ISO/IEC 16262 国际标准。
  • 1998 年 6 月,ECMAScript 2.0 版发布。
  • 1999 年 12 月,ECMAScript 3.0 版发布,成为 JavaScript 的通行标准,得到了广泛支持。
  • 1999 年 12 月 : 增加正则、更好的文字处理、新的控制语句、try/catch 异常处理、更加明确的错误定义,数字输出格式等等。放弃发布。
  • 2007 年 10 月,ECMAScript4.0 版草案发布,对 3.0 版做了大幅升级,预计次年 8 月发布正式版本。草案发布后,由于 4.0 版的目标过于激进,各方对于是否通过这个标准,发生了严重分歧。以 Yahoo、Microsoft、Google 为首的大公司,反对 JavaScript 的大幅升级,主张小幅改动;以 JavaScript 创造者 Brendan Eich 为首的 Mozilla 公司,则坚持当前的草案。
  • 2008 年 7 月,由于对于下一个版本应该包括哪些功能,各方分歧太大,争论过于激进,ECMA 开会决定,中止 ECMAScript 4.0 的开发,将其中涉及现有功能改善的一小部分,发布为 ECMAScript3.1,而将其他激进的设想扩大范围,放入以后的版本,由于会议的气氛,该版本的项目代号起名为 Harmony (和谐)。会后不久,ECMAScript 3.1 改名为 ECMAScript 5。
  • 2009 年 12 月 : 完善了 ECMASript 3 版本、增加 "strict mode," (严格模式)、以及新的功能,如 getter 和 setter、 JSON 库支持和更完整的对象属性。ECMAScript 5.0 版正式发布。Harmony 项目则一分为二,一些较为可行的设想定名为 JavaScript.next 继续开发,后来演变成 ECMAScript 6;一些不是很成熟的设想,则被视为 JavaScript.next.next,在更远的将来再考虑推出。
  • 2011 年 06 月 :ECMAscript 5.1 版发布,并且成为 ISO 国际标准(ISO/IEC 16262:2011)。
  • 2013 年 3 月,ECMAScript 6 草案冻结,不再添加新功能。新的功能设想将被放到 ECMAScript 7。
  • 2013 年 12 月,ECMAScript 6 草案发布。
  • 2015 年 06 月 : 第六版的名字有很多,可以叫 ECMAScript6 (ES6) ,也可以叫 ECMAScript 2015 (ES2015) 。
  • 2015 年 6 月 17 日,ECMAScript 6 发布正式版本,即 ECMAScript 2015。
  • 2016 年 06 月 : 也被称为 ECMAScript 2016。完善 ES6 规范,还包括两个新的功能 : 求幂运算符 (*) 和 array.prototype.includes 方法。
  • 2017 年 06 月 : 增加新的功能,如并发、原子操作、Object.values/Object.entries、 字符串填充、promises、 await/asyn 等等。

JavaScript 简史

JavaScript 的组成部分

JavaScript 简史
JavaScript 的三个主要组成部分是:ECMAScript(核心),DOM (文档对象模型),BOM (浏览器对象模型)。

ECMAScript(核心)

【ECMA-262】并没有参照 web 浏览器,规定了语言的组成部分,其具体内容包括语法、类型、语言、关键字、保留字、操作符、对象等。ECMAScript 的兼容:

  1. 支持【ECMA-262】描述的所有“类型、值、对象、属性、函数以及程序语法和语义” 。
  2. 支持 Unicode 字符标准。
  3. 添加【ECMA-262】没有描述的更多“类型、值、对象、属性和函数”,【ECMA-262】说的这些新增特性,主要是指该标准中没有规定的新对象和对象的新属性。
  4. 支持【ECMA-262】中没有定义的“程序和正则表达式的语法”。也就是说可以修改和扩展内置的正则表达式语法。

DOM (文档对象模型)

文档对象模型 (DOM) 是针对 XML 但经过扩展用于 HTML 的应用程序编程接口(API)。DOM 把整个页面映射为一个多层次节点结构。HTML 或者 XML 页面中的每个组成部分都是某种类型的节点,这些节点又包含着不同类型的数据。JavaScript 简史其实说白了,文档对象模型 (DOM) 就是操作网页上的那些标签,来实现动态的效果。在 DOM 中,页面一般可以用分层节点图表示:JavaScript 简史DOM 级别:

  • DOM1 级于 1998 年 10 月成为 W3C 的推荐标准。BOM1 由两个模块组成分别是 DOM core 和 DOM HTML。
  • DOM core:规定如何映射基于 XML 的文档结构,以便简化对文档中任意部分的访问和操作。
  • DOM HTML:在 DOM core 的基础上加以扩展,添加了针对 HTML 的对象和方法。
  • DOM2 级在原来 DOM 的基础上有扩充了鼠标和用户界面事件、范围、遍历等细分模块,通过对象接口增加了对 css 的支持。包括以下模块:
  1. DOM Views (DOM 视图):定义了跟踪不同文档视图的接口。
  2. DOM Events (DOM 事件):定义了事件与事件处理的接口。
  3. DOM Traversal and Range(DOM 遍历和范围):定义了遍历和操作文档的接口。
  • DOM3 级则进一步扩展了 DOM,引入了加载和保存模块以统一方式加载和保存文档的方法;新增了 DOM 验证模块主要还是验证文档的方法。

BOM (浏览器对象模型)

浏览器对象模型 (BOM) 是处理浏览器窗口和框架,我们习惯上把所有针对浏览器的 JavaScript 扩展算作是 BOM 的一部分。包括以下:

  1. 弹出新浏览器窗口的功能。
  2. 移动、缩放和关闭浏览器窗口的功能。
  3. 提供浏览器所加载页面的详细信息的 navigator 对象。
  4. 提供浏览器所加载页面的详细信息的 location 对象。
  5. 提供用户分辨率详细信息的 screen 对象。
  6. 对 cookies 的支持。
  7. 像 XMLHttpRequest 和 IE 的 ActionXobject 这样的自定义对象。

浏览器对象模型 (BOM) 其实很简单,它包含了当前浏览器上的一些操作,比如说像关闭按钮、刷新按钮、前进和后退按钮等等。综上来说,JavaScript 就包含了以上这三部分内容,第一部分就是核心基础语法,这是非常非常重要的东西,有了核心基础的铺垫,我们才能后续的学习文档对象模型 (DOM) 和浏览器对象模型 (BOM)。文档对象模型 (DOM) 就是操作一些网页上的一些标签元素,来实现网页上的动态效果。而浏览器对象模型 (BOM) 就是像比如说滚动的行为,点击回到顶部,还有刷新,前进,后退等操作。这些特性就是我们需要了解的内容,在你后续进行详细学习的时候,就带着这些特性疑问去学习,会有事半功倍的效果。

    **更多精彩推荐**

微信 Android 版支持改微信号,淘宝硬核拒绝改名要求;5G 套餐价格松动;Kotlin 1.4 第二个预览版发布 | 极客头条

[☞](http://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650746260&idx=1&sn=ec250a1510b9cf57c8ba19578decefb1&chksm=bea75c4789d0d551e79436a31b723defb9f792c09c0d78c83d04b011a5c1758175aad851c534&scene=21#wechat_redirect)[跨行成为程序员的 15 个实用技巧!](http://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650751455&idx=4&sn=947c7441024934b3cec64b3011428684&chksm=bea7300c89d0b91a1350b5a448dc59d4e58283d038519fb89b3517301a95ce8ac26fb334ba48&scene=21#wechat_redirect)

[☞](http://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650750309&idx=2&sn=e6772d93425a7a23a9d53c793274b9bd&chksm=bea74cb689d0c5a0a5958c2f20aaa0fdf3616a3089b6e61082e47f6639ed593951c7d39e5698&scene=21#wechat_redirect)[程序员摆地摊的正确姿势!](http://mp.weixin.qq.com/s?__biz=MzA5MzY4NTQwMA==&mid=2651019223&idx=3&sn=3a0c350f227a0c3c2453c30225ea8dd1&chksm=8bade420bcda6d36617dc74ba9d9f5bd91f5e034de01def7d4520b55a0a44494b43e02b7e141&scene=21#wechat_redirect)

☞[全网唯一秃头数据集:20 万张人像,网罗各类秃头](http://mp.weixin.qq.com/s?__biz=MzI0ODcxODk5OA==&mid=2247517347&idx=1&sn=3fa2a10b4128252bc1cd6e2f7d183050&chksm=e99eb75adee93e4c0001439bc70d8d33a40f05cf1c0e7e51c0625640f95cc2ab21aaf91c7012&scene=21#wechat_redirect)

☞[一个神秘 URL 酿大祸,差点让我背锅!](http://mp.weixin.qq.com/s?__biz=MzA3MjY1MTQwNQ==&mid=2649837109&idx=1&sn=3473f012e4e1beeffc253821dde1915b&chksm=871ee9d7b06960c14f1d100a53e93bd03a7ae2aa87cbb8c22d4554189717911d2be268ade087&scene=21#wechat_redirect)

☞[Uber 前无人驾驶工程师告诉你,国内无人驾驶之路还要走多久?](http://mp.weixin.qq.com/s?__biz=MzI0ODcxODk5OA==&mid=2247517193&idx=1&sn=076ebccc734132631eeda66f7aa4ce5a&chksm=e99eb7f0dee93ee6e66da60d51dc0c04d45b52729a524f12352f54b4e474f71578de52deb6a2&scene=21#wechat_redirect)

JavaScript 简史你点的每个“在看”,我都认真当成了喜欢
```

来源链接:mp.weixin.qq.com