在js
诞生之前,大部分因特网用户还仅仅通过 28.8 kbit/s
的调制解调器
连接到网络,网络访问条件可以说很恶劣,拨号上网速度之慢,每次与服务器
进行数据交互都是对用户耐心的一次考验,但是这个时候的网页为了更好提供更多功能,已经变得相对复杂了,很多页面存在表单信息
提交。
当时所有的请求都是直接发送到服务器
进行处理的,不管是数据验证
还是实质的读取存储数据
。
可是,很多情况下,用户
由于不太清楚页面信息填写规则,把一些错误信息发送到后台,后台肯定不干啊,结果用户
填完信息,等了半天,页面才出现一个错误提示,某某字段是必填项啊,你必须要填什么信息或者你填写的某某信息不太符合规范之类。
有点像你到外面超市买东西,你把要买的东西给收银员
,收银员安静的看着你大半天,才说一句,亲你给的钱不够哦。
这种体验是很不友好的,所以当网上冲浪
越来越流行时,对于开发网页脚本语言
的需求也逐渐增大,因为客户端
能够先对发送的数据做一定基础验证
,这样尽量保证对于服务器
的每次请求能够更有效。
历史上第一个比较成熟的网络浏览器,就是1994年
,网景公司(Netscape
)发布的Navigator
浏览器0.9版
,虽然这个版本的浏览器只能用来浏览,仍然轰动一时。所以网景公司最先确定要开发一个网页脚本语言
,至少让浏览器有一定与用户互动的能力。
网景公司当时有两个选择:
选择 | 解释 | 优势 |
---|---|---|
采用现有的语言 | 比如Perl 、Python 、Tcl 、Scheme 等等,允许它们直接嵌入网页 | 有利于充分利用现有代码和程序员资源,推广起来比较容易 |
采用全新的语言 | 发明一种全新的语言 | 有利于开发出完全适用的语言,实现起来比较容易。 |
到底采用哪一个选择,网景公司内部争执不下,管理层一时难以下定决心。
就在这时,发生了另外一件大事:1995年Sun公司
将Oak
语言改名为Java
,正式向市场推出。
Sun公司
大肆宣传,许诺这种语言可以一次编写,到处运行
(Write Once, Run Anywhere),它看上去很可能成为未来的主宰。
网景公司
动了心,决定与Sun公司
结成联盟。它不仅允许Java程序
以applet
(小程序)的形式,直接在浏览器中运行;甚至还考虑直接将Java
作为脚本语言嵌入网页,只是因为这样会使HTML
网页过于复杂,后来才不得不放弃。
总之,当时的形势就是,网景公司的整个管理层,都是Java
语言的信徒,Sun
公司完全介入网页脚本语言
的决策。
因此,Javascript
后来就是网景
和Sun
两家公司一起携手推向市场的,这种语言被命名为Java+script
并不是偶然的。
1995年5月,网景公司做出决策,未来的网页脚本语言
必须看上去与Java足够相似
,但是比Java
简单,使得非专业的网页作者也能很快上手。这个决策实际上将Perl
、Python
、Tcl
、Scheme
等非面向对象编程
的语言都排除在外了。
指定当时刚入职一个月的34岁的系统程序员Brendan Eich
为这种简化版Java语言
的设计师。
可是Brendan Eich
的主要方向和兴趣是函数式编程
,网景公司最初招聘他的目的,是研究将Scheme
语言作为网页脚本语言
的可能性,他对面向对象编程的Java
一点兴趣也没有。
为了应付公司安排的任务,他只用10天时间就把Javascript
设计出来了。
由于设计时间太短,语言的一些细节考虑得不够严谨,导致后来很长一段时间,Javascript
写出来的程序混乱不堪。
总的来说,他的设计思路是这样的:
借鉴C语言
的基本语法;
借鉴Java语言
的数据类型
和内存管理
;
借鉴Scheme语言
,将函数提升到第一等公民
(first class)的地位;
借鉴Self语言
,使用基于原型(prototype
)的继承机制。
由Brendan Eich(函数式编程)与网景公司(面向对象编程)共同决定,Javascript
语言风格=(简化的)函数式编程+(简化的)面向对象编程
多年以后,Brendan Eich
还是看不起Java
。他说:
Java(对Javascript)的影响,主要是把数据分成基本类型(primitive)和对象类型(object)两种,比如字符串和字符串对象,以及引入了Y2K问题,(这导致后来不得不添加了一个返回四位数年份的Date.getFullYear()函数。),这真是不幸啊。
作为设计者,他一点也不喜欢自己的这个把Java
作为Javascript
设计原型的产品
与其说我爱Javascript,不如说我恨它。它是C语言和Self语言一夜情的产物。十八世纪英国文学家约翰逊博士说得好:‘它的优秀之处并非原创,它的原创之处并不优秀。’(the part that is good is not original, and the part that is original is not good.)
JavaScript 和 Java 的对比
JavaScript | Java |
---|---|
面向对象。不区分对象类型。通过原型机制继承,任何对象的属性和方法均可以被动态添加。 | 基于类系统。分为类和实例,通过类层级的定义实现继承。不能动态增加对象或类的属性或方法。 |
变量类型不需要提前声明(动态类型)。 | 变量类型必须提前声明(静态类型)。 |
不能直接自动写入硬盘。 | 可以直接自动写入硬盘。 |
最初定js的名字是LiveScript
,想用于在1995年
发行的Netscape Navigator 2.0
,目的是在浏览器和服务器(本来要叫它 LiveWire
)端使用它。
但是在 Netscape Navigator 2.0
即将正式发布前,Netscape
将其更名为 JavaScript
,目的是为了利用Java
这个因特网时髦词汇。Netscape
的赌注最终得到回报,JavaScript
从此变成了因特网的必备组件。
因为 JavaScript 1.0
如此成功,Netscape
在 Netscape Navigator 3.0
中发布了 1.1 版。恰巧那个时候,微软
决定进军浏览器
,发布了 IE 3.0
并搭载了一个 JavaScript
的克隆版,叫做 JScript
(这样命名是为了避免与 Netscape
潜在的许可纠纷)。微软
步入 Web浏览器
领域的这重要一步虽然令其声名狼藉,但也成为JavaScript
语言发展过程中的重要一步。
在微软
进入后,有 3 种不同的 JavaScript
版本同时存在:Netscape Navigator 3.0
中的 JavaScript
、IE
中的 JScript
以及 CEnvi
中的 ScriptEase
。与 C
和其他编程语言不同的是,JavaScript
并没有一个标准来统一其语法或特性,而这 3 种不同的版本恰恰突出了这个问题。随着业界担心的增加,这个语言的标准化显然已经势在必行。
1997 年,JavaScript 1.1
作为一个草案提交给欧洲计算机制造商协会(ECMA)
。第 39 技术委员会(TC39)被委派来标准化一个通用、跨平台、中立于厂商的脚本语言的语法和语义。由来自 Netscape
、Sun
、微软
、Borland
和其他一些对脚本编程感兴趣的公司的程序员
组成的 TC39
锤炼出了 ECMA-262
,该标准定义了名为 ECMAScript
的全新脚本语言。
第二年,国际标准化组织
及国际电工委员会
(ISO
/IEC
)也采纳 ECMAScript
作为标准(ISO
/IEC-16262
)。从此,Web浏览器
就开始努力(虽然有着不同的程度的成功和失败)将 ECMAScript
作为 JavaScript
实现的基础。
时间 | 解释 |
---|---|
1906年 | 国际电工委员会(IEC)成立 |
1946 | ISO国际标准组织成立 |
1961 | 欧洲计算机制造联合会(ECMA)成立 |
1994 | Netscape Navigator 0.9发布 |
1995.5 | js 1.0编写完成 |
1997 | EMCAScript标准产生 |
1998 | ISO及IEC采纳ECMAScript作为标准 |
1998.6 | ECMAScript 2.0版发布 |
1999.12 | ECMAScript 3.0版发布,成为JavaScript的通行标准,得到了广泛支持。强大的正则表达式,更好的文字链处理,新的控制指令,异常处理,错误定义更加明确,数输出的格式化及其它改变 |
2007.10 | ECMAScript 4.0版草案发布,对3.0版做了大幅升级,预计次年8月发布正式版本。草案发布后,由于4.0版的目标过于激进,各方对于是否通过这个标准,发生了严重分歧。以Yahoo、Microsoft、Google为首的大公司,反对JavaScript的大幅升级,主张小幅改动;以JavaScript创造者Brendan Eich为首的Mozilla公司,则坚持当前的草案。 |
2008.7 | 由于对于下一个版本应该包括哪些功能,各方分歧太大,争论过于激进,ECMA开会决定,中止ECMAScript 4.0的开发,将其中涉及现有功能改善的一小部分,发布为ECMAScript 3.1,而将其他激进的设想扩大范围,放入以后的版本,由于会议的气氛,该版本的项目代号起名为Harmony(和谐)。会后不久,ECMAScript 3.1就改名为ECMAScript 5。 |
2009.12 | ECMAScript 5.0版正式发布。Harmony项目则一分为二,一些较为可行的设想定名为JavaScript.next继续开发,后来演变成ECMAScript 6;一些不是很成熟的设想,则被视为JavaScript.next.next,在更远的将来再考虑推出。 |
2011.6 | ECMAscript 5.1版发布,并且成为ISO国际标准(ISO/IEC 16262:2011)。 |
2013.3 | ECMAScript 6草案冻结,不再添加新功能。新的功能设想将被放到ECMAScript 7。 |
2013.12 | ECMAScript 6草案发布。然后是12个月的讨论期,听取各方反馈。 |
2015.6.17 | ECMAScript 6发布正式版本,即ECMAScript 2015。 |
2016.6 | ECMAScript 7发布正式版本,即ECMAScript 2016。 |
名词 | 解释 |
---|---|
Netscape | 网景 |
Brendan Eich | js之父 |
Y2K | 2000年问题(Year 2000 Problem,简称Y2K),台湾称千禧虫危机 ,香港则常称为千年虫问题 ,是指由于计算机程序设计的一些问题,使得计算机在处理2000年1月1日以后的日期和时间时候,可能会出现不正确的操作,从而可能导致一些敏感的工业部门(比如电力,能源)和银行,政府等部门在2000年1月1日零点工作停顿甚至是发生灾难性的结果。 |
ECMA | European Computer Manufactures Association 的缩写,中文称欧洲计算机制造联合会 。是1961年成立的旨在建立统一的电脑操作格式标准--包括程序语言和输入输出的组织。 |
TC39 | ECMA的第39号技术专家委员会(Technical Committee 39,简称TC39)负责制订ECMAScript标准,成员包括Microsoft、Mozilla、Google等大公司。TC39的总体考虑是,ES5与ES3基本保持兼容,较大的语法修正和新功能加入,将由JavaScript.next完成。 |
ECMA-262 | 定义了ECMAScript支持的一套关键字,这些关键字标识了ECMAScript语句的开头和/或结尾。根据规定,关键字是保留的,不能用作变量名或函数名。 |
ISO | 是International Organization for Standardization 的简称,中文称国际标准化组织 ,是一个全球性的非政府组织 ,是国际标准化领域 中一个十分重要的组织。ISO 一来源于希腊语ISOS ,即EQUAL ——平等之意。中国 是ISO 的正式成员,代表中国 参加ISO 的国家机构是中国国家技术监督局(CSBTS ) |
IEC | 是International Electrotechnical Commission 的简称,中文称国际电工委员会 ,它是世界上成立最早 的国际性电工标准化机构 ,负责有关电气工程 和电子工程领域 中的国际标准化 工作。 |