诞生之初
由于90年代左右,蒂姆·伯纳斯-李在发明了HTML和哈肯·维姆·莱提出CSS,网页变得越来越流行。在1993年,NCSA(国家超级电脑应用中心)发表了NCSA Mosaic, 这是一个最早流行的图形接口网页浏览器。一年后,开发人员创立了网景公司(Netscape),同时雇佣了更多原来Mosaic的开发者来开发一款新的浏览器Netscape Navigator,用来对抗当时已经成为NSCA的Mosaic浏览器。在此之后的4个月时间内,就占据了3/4市场份额。同一年,公司的创始人马克·安德森认为浏览器不能只有浏览的能力,需要增加用户的互动;也就是需要一种网页脚本语言,使得浏览器可以与网页互动。
脚本语言的选择
最初入选的脚本语言有Perl、Python、Tcl、Scheme等等,此外还可以创建一种新的语言。但是在此之前网景就与昇阳公司合作,在新的浏览器中支持Java,1995年,网景招募了布兰登·艾克,要求他为浏览器增加一个脚本功能,同时需要体现与Java有关联,同年的5月份,布兰登·艾克就仅仅花了10天设计出了JavaScript的原型,当然也就淘汰了其他的脚本语言。 最初的命名为Mocha(摩卡),之后又在浏览器的2.0版本改为LiveScript,年底,为了蹭当时Java流量,将名字改为JavaScript。
微软的跟进
微软在1995年推出了IE浏览器,由于对Netscape Navigator的新的脚本语言感兴趣,对该浏览器进行逆向工程,也就是反汇编,创建了新的语言JScript。与此同时,浏览器大战正式开始了。
标准化制定
1996年11月,网景向ECMA提交了语言制定标准。1997年6月,ECMA以JavaScript制定了标准,由于版权问题,标准命名为ECMAScript。
夕阳下的网景
由于微软操作系统windows的火爆,将IE浏览器捆绑进了Windows中,很快就超越了Netscape Navigator浏览器。1998年初,网景决定放手一搏,开放了Mozilla的源代码,然而并没有什么用同年年底,网景被AOL以42亿美元收购。
JavaScript的10个设计缺陷
由于JavaScript的设计时间过短,过早的标准化以及第一个集合了集合了函数式编程和面向对象编程的特点,使得JavaScript又较多的设计缺陷。
- 不适合大型开发:Javascript没有名称空间(namespace),很难模块化;没有如何将代码分布在多个文件的规范;允许同名函数的重复定义,后面的定义可以覆盖前面的定义,很不利于模块化加载。
- 标准库非常小:Javascript提供的标准函数库非常小,只能完成一些基本操作,很多功能都不具备。
- null与undefined:null属于对象(object)的一种,意思是该对象为空;undefined则是一种数据类型,表示未定义。
- 全局变量的控制:Javascript的全局变量,在所有模块中都是可见的;任何一个函数内部都可以生成全局变量,加剧了程序的复杂性。
- 自动插入行尾分号:Javascript的所有语句,都必须以分号结尾。如果你忘记加了,浏览器会自动加上。
- 加法运算符:+号作为运算符,有两个含义,可以表示数字与数字的和,也可以表示字符与字符的连接。
- NaN:NaN是一种数字,表示超出了解释器的极限
- 数组和对象的区分:数组也属于对象(object),所以要区分一个对象到底是不是数组,相当麻烦。
- ==和===:==用来判断两个值是否相等。当两个值类型不同时,会发生自动转换,所以推荐“===”。
- 基本类型的包装对象:Javascript有三种基本数据类型:字符串、数字和布尔值。它们都有相应的建构函数,可以生成字符串对象、数字对象和布尔值对象。