JavaScript 的诞生
JavaScript 的诞生
诞生由来
JavaScript因为互联网而生,紧随着浏览器的出现而问世。回顾它的历史,就要从浏览器的历史讲起。
1990年底,欧洲核能研究组织(CERN)科学家Tim Berners-Lee,在全世界最大的电脑网络——互联网的基础上,发明了万维网(World Wide Web),从此可以在网上浏览网页文件。最早的网页只能在操作系统的终端里浏览,也就是说只能使用命令行操作,网页都是在字符窗口中显示,这当然非常不方便。
1992年底,美国国家超级电脑应用中心(NCSA)开始开发一个独立的浏览器,叫做Mosaic。这是人类历史上第一个浏览器,从此网页可以在图形界面的窗口浏览。
1994年10月,NCSA的一个主要程序员Marc Andreessen联合风险投资家Jim Clark,成立了Mosaic通信公司(Mosaic Communications),不久后改名为Netscape。这家公司的方向,就是在Mosaic的基础上,开发面向普通用户的新一代的浏览器Netscape Navigator。
1994年12月,Navigator发布了1.0版,市场份额一举超过90%。
Netscape公司很快发现,Navigator浏览器需要一种可以嵌入网页的脚本语言,用来控制浏览器行为。当时,网速很慢而且上网费很贵,有些操作不宜在服务器端完成。比如,如果用户忘记填写“用户名”,就点了“发送”按钮,到服务器再发现这一点就有点太晚了,最好能在用户发出数据之前,就告诉用户“请填写xx栏”。这就需要在网页中嵌入小程序,让浏览器检查每一栏是否都填写了。
管理层对这种浏览器脚本语言的设想是:功能不需要太强,语法较为简单,容易学习和部署。那一年,正逢Java语言开始推向市场,Netscape公司决定,脚本语言的语法要接近Java,并且可以支持Java程序。这些设想直接排除了使用现存语言,比如perl、python和TCL。
1995年,Netscape公司雇佣了程序员Brendan Eich开发这种网页脚本语言。Brendan Eich有很强的函数式编程背景,希望以Scheme语言(函数式语言鼻祖LISP语言的一种方言)为蓝本,实现这种新语言。
1995年5月,Brendan Eich只用了10天,就设计完成了这种语言的第一版。它是一个大杂烩,语法有多个来源:
- 基本语法:借鉴C语言和Java语言。
- 数据结构:借鉴Java语言,包括将值分成原始值和对象两大类。
- 函数的用法:借鉴Scheme语言和Awk语言,将函数当作第一等公民,并引入闭包。
- 原型继承模型:借鉴Self语言(Smalltalk的一种变种)。
- 正则表达式:借鉴Perl语言。
- 字符串和数组处理:借鉴Python语言。
为了保持简单,这种脚本语言缺少一些关键的功能,比如块级作用域、模块、子类型(subtyping)等等,但是可以利用现有功能找出解决办法。这种功能的不足,直接导致了后来JavaScript的一个显著特点:对于其他语言,你需要学习语言的各种功能,而对于JavaScript,你常常需要学习各种解决问题的模式。而且由于来源多样,从一开始就注定,JavaScript的编程风格是函数式编程和面向对象编程的一种混合体。
发展
JavaScript原本是打算叫liveScript的,但怕这名字不够响亮,于是就想借着java的热潮,搭搭热炒java的顺风车,改名叫了JavaScript。JavaScript一经发布,关注度就居高不下,这也引起了当时的巨头微软的注意。微软为了抢占浏览器的市场份额,在96年8月便在其发布的Internet Explorer 3中搭载了其对JavaScript的实现——JScript。微软JScript的推出,便意味着市场上就有两套JavaScript的实现语言了(这里的JavaScript指的是一套语言规范,微软的JScript和Netscape的JavaScript都是对这套规范的实现)。因为当时还没有标准规定JavaScript语言的语法和特性,微软和Netscape的实现方法有着很多的差异,导致了很多问题,比如只编写一套代码,很难在两个平台完美运行。所以TC39协会在97年定义出了名叫ECMScript的新脚本语言规范。从此浏览器开发商就开始致力于将ECMScript作为各自JavaScript实现的基础。
JavaScript不仅是对于ECMScript的实现,它还对其进行了扩展,加入了DOM和BOM接口。加入DOM,是为了能再不刷新页面的情况下就能改变页面的内容和外观。加入BOM,一是为了提供Global对象,承载所有的全局变量,二是为了提供访问和操作浏览器的接口。所以我们所说的JavaScript其实是由ECMScript,DOM,BOM三部分构成的。我们所说的js的兼容性问题一般都是由于由于各个浏览器厂商对于DOM,BOM的实现方式不一样造成的(尤其是IE),并且各个浏览器还都有自己独有的针对DOM的扩展。
ECMAScript版本:
-
ECMAScript第一版是根据Netscape发布的JavaScript1.1 指定的,本质上与JavaScript1.1相同, 只是删除了所有针对Netscape浏览器特有的代码,以及做了一些小改动
-
ECMAScript第二版主要是对第一版的编辑加工,没有做任何的新增,修改,删除
-
ECMAScript第三版才算是对ECMAScript的第一次真正修改,修改的内容涉及字符串处理,错误处理和数值输 出,这一版还新增了对正则表达式,控制语句等的支持
-
ECMAScript第四版因为改动太大而流产,同时出现了ECMAScript3.1的替代性提案
-
因为第四版流产,ECMAScript3.1作为了ECMAScript第5版发布,此版本新增了一些新功能,比如原生的JSON对象, 继承的方法,并且消除了第三版中存在的一些歧义
-
基于流产的第四版并且经过多年的重新打磨与完善,全新的ES2015年闪亮登场,从此ES开始改为以年份命名,比如现在的ES2016,ES2017。ES6是ES2015以及之后ECMAScript的统称。
ECMAScript是纸上的标准,JS 是浏览器的实现,纸上标准往往落后于浏览器,先实现,再写进标准.
本文地址:https://blog.csdn.net/qq_38757174/article/details/107294060
上一篇: 二进制^v^