转行学前端的第 22 天 : 了解 JavaScript 历史

1,838 阅读11分钟

我是小又又,住在武汉,做了两年新媒体,准备用 6 个月时间转行前端。

今日学习目标


昨天终于将店铺页面完整实现了,就准备开始学习 JavaScirpt 啦,今天主要是基于搜索来学习《 JavaScirpt 高级程序设计》(第三版) 1.1 章节中的 JavaScript 历史,又是适合学习的一天,加油,小又又!!!!


WHY


js诞生之前,大部分因特网用户还仅仅通过 28.8 kbit/s调制解调器连接到网络,网络访问条件可以说很恶劣,拨号上网速度之慢,每次与服务器进行数据交互都是对用户耐心的一次考验,但是这个时候的网页为了更好提供更多功能,已经变得相对复杂了,很多页面存在表单信息提交。

当时所有的请求都是直接发送到服务器进行处理的,不管是数据验证还是实质的读取存储数据

可是,很多情况下,用户由于不太清楚页面信息填写规则,把一些错误信息发送到后台,后台肯定不干啊,结果用户填完信息,等了半天,页面才出现一个错误提示,某某字段是必填项啊,你必须要填什么信息或者你填写的某某信息不太符合规范之类。

有点像你到外面超市买东西,你把要买的东西给收银员,收银员安静的看着你大半天,才说一句,亲你给的钱不够哦。

这种体验是很不友好的,所以当网上冲浪越来越流行时,对于开发网页脚本语言的需求也逐渐增大,因为客户端能够先对发送的数据做一定基础验证,这样尽量保证对于服务器的每次请求能够更有效。


WHAT


历史上第一个比较成熟的网络浏览器,就是1994年,网景公司(Netscape)发布的Navigator浏览器0.9版,虽然这个版本的浏览器只能用来浏览,仍然轰动一时。所以网景公司最先确定要开发一个网页脚本语言,至少让浏览器有一定与用户互动的能力。

网景公司当时有两个选择:

选择 解释 优势
采用现有的语言 比如PerlPythonTclScheme等等,允许它们直接嵌入网页 有利于充分利用现有代码和程序员资源,推广起来比较容易
采用全新的语言 发明一种全新的语言 有利于开发出完全适用的语言,实现起来比较容易。

到底采用哪一个选择,网景公司内部争执不下,管理层一时难以下定决心。

就在这时,发生了另外一件大事:1995年Sun公司Oak语言改名为Java,正式向市场推出。

Sun公司大肆宣传,许诺这种语言可以一次编写,到处运行(Write Once, Run Anywhere),它看上去很可能成为未来的主宰。

网景公司动了心,决定与Sun公司结成联盟。它不仅允许Java程序applet(小程序)的形式,直接在浏览器中运行;甚至还考虑直接将Java作为脚本语言嵌入网页,只是因为这样会使HTML网页过于复杂,后来才不得不放弃。

总之,当时的形势就是,网景公司的整个管理层,都是Java语言的信徒,Sun公司完全介入网页脚本语言的决策。

因此,Javascript后来就是网景Sun两家公司一起携手推向市场的,这种语言被命名为Java+script并不是偶然的。

1995年5月,网景公司做出决策,未来的网页脚本语言必须看上去与Java足够相似,但是比Java简单,使得非专业的网页作者也能很快上手。这个决策实际上将PerlPythonTclScheme非面向对象编程的语言都排除在外了。

指定当时刚入职一个月的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
面向对象。不区分对象类型。通过原型机制继承,任何对象的属性和方法均可以被动态添加。 基于类系统。分为类和实例,通过类层级的定义实现继承。不能动态增加对象或类的属性或方法。
变量类型不需要提前声明(动态类型)。 变量类型必须提前声明(静态类型)。
不能直接自动写入硬盘。 可以直接自动写入硬盘。

HISTORY


最初定js的名字是LiveScript,想用于在1995年发行的Netscape Navigator 2.0,目的是在浏览器和服务器(本来要叫它 LiveWire)端使用它。
但是在 Netscape Navigator 2.0 即将正式发布前,Netscape 将其更名为 JavaScript,目的是为了利用Java这个因特网时髦词汇。Netscape 的赌注最终得到回报,JavaScript从此变成了因特网的必备组件。

因为 JavaScript 1.0 如此成功,NetscapeNetscape Navigator 3.0中发布了 1.1 版。恰巧那个时候,微软决定进军浏览器,发布了 IE 3.0 并搭载了一个 JavaScript 的克隆版,叫做 JScript(这样命名是为了避免与 Netscape 潜在的许可纠纷)。微软步入 Web浏览器领域的这重要一步虽然令其声名狼藉,但也成为JavaScript语言发展过程中的重要一步。

微软进入后,有 3 种不同的 JavaScript 版本同时存在:Netscape Navigator 3.0 中的 JavaScriptIE 中的 JScript 以及 CEnvi 中的 ScriptEase。与 C 和其他编程语言不同的是,JavaScript 并没有一个标准来统一其语法或特性,而这 3 种不同的版本恰恰突出了这个问题。随着业界担心的增加,这个语言的标准化显然已经势在必行。

1997 年,JavaScript 1.1 作为一个草案提交给欧洲计算机制造商协会(ECMA)。第 39 技术委员会(TC39)被委派来标准化一个通用、跨平台、中立于厂商的脚本语言的语法和语义。由来自 NetscapeSun微软Borland 和其他一些对脚本编程感兴趣的公司的程序员组成的 TC39 锤炼出了 ECMA-262,该标准定义了名为 ECMAScript 的全新脚本语言。

第二年,国际标准化组织国际电工委员会ISO/IEC)也采纳 ECMAScript 作为标准(ISO/IEC-16262)。从此,Web浏览器就开始努力(虽然有着不同的程度的成功和失败)将 ECMAScript 作为 JavaScript 实现的基础。


TIMELINE

时间 解释
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的简称,中文称国际电工委员会,它是世界上成立最早国际性电工标准化机构,负责有关电气工程电子工程领域中的国际标准化工作。

今日学习总结


今日心情


今天基础了解了JS历史,感觉很不错,了解他的产生历史原因,希望明天学习到更多东西~~~~

本文使用 mdnice 排版