js 基础前置知识

js产生原因 #

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

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

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

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

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


开始造轮子 #

历史上第一个比较成熟的网络浏览器,就是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 的对比

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

开发版本迭代 #

最初定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 实现的基础。


时间线 #

时间解释
1906年国际电工委员会(IEC)成立
1946ISO国际标准组织成立
1961欧洲计算机制造联合会(ECMA)成立
1994Netscape Navigator 0.9发布
1995.5js 1.0编写完成
1997EMCAScript标准产生
1998ISO及IEC采纳ECMAScript作为标准
1998.6ECMAScript 2.0版发布
1999.12ECMAScript 3.0版发布,成为JavaScript的通行标准,得到了广泛支持。强大的正则表达式,更好的文字链处理,新的控制指令,异常处理,错误定义更加明确,数输出的格式化及其它改变
2007.10ECMAScript 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.12ECMAScript 5.0版正式发布。Harmony项目则一分为二,一些较为可行的设想定名为JavaScript.next继续开发,后来演变成ECMAScript 6;一些不是很成熟的设想,则被视为JavaScript.next.next,在更远的将来再考虑推出。
2011.6ECMAscript 5.1版发布,并且成为ISO国际标准(ISO/IEC 16262:2011)。
2013.3ECMAScript 6草案冻结,不再添加新功能。新的功能设想将被放到ECMAScript 7。
2013.12ECMAScript 6草案发布。然后是12个月的讨论期,听取各方反馈。
2015.6.17ECMAScript 6发布正式版本,即ECMAScript 2015。
2016.6ECMAScript 7发布正式版本,即ECMAScript 2016。

名词小课堂 #

名词解释
Netscape网景
Brendan Eichjs之父
Y2K2000年问题(Year 2000 Problem,简称Y2K),台湾称千禧虫危机,香港则常称为千年虫问题,是指由于计算机程序设计的一些问题,使得计算机在处理2000年1月1日以后的日期和时间时候,可能会出现不正确的操作,从而可能导致一些敏感的工业部门(比如电力,能源)和银行,政府等部门在2000年1月1日零点工作停顿甚至是发生灾难性的结果。
ECMAEuropean Computer Manufactures Association的缩写,中文称欧洲计算机制造联合会。是1961年成立的旨在建立统一的电脑操作格式标准--包括程序语言和输入输出的组织。
TC39ECMA的第39号技术专家委员会(Technical Committee 39,简称TC39)负责制订ECMAScript标准,成员包括Microsoft、Mozilla、Google等大公司。TC39的总体考虑是,ES5与ES3基本保持兼容,较大的语法修正和新功能加入,将由JavaScript.next完成。
ECMA-262定义了ECMAScript支持的一套关键字,这些关键字标识了ECMAScript语句的开头和/或结尾。根据规定,关键字是保留的,不能用作变量名或函数名。
ISOInternational Organization for Standardization的简称,中文称国际标准化组织,是一个全球性的非政府组织,是国际标准化领域中一个十分重要的组织。ISO一来源于希腊语ISOS,即EQUAL——平等之意。中国ISO的正式成员,代表中国参加ISO的国家机构是中国国家技术监督局(CSBTS
IECInternational Electrotechnical Commission的简称,中文称国际电工委员会,它是世界上成立最早国际性电工标准化机构,负责有关电气工程电子工程领域中的国际标准化工作。
Build by Loppo 0.6.16