JavaScript诞生和其设计缺陷

133 阅读3分钟

JavaScript的诞生

1994年,Mosaic的主要开发人员随即创立了Netscape公司也就是网景公司,想雇佣原来开发NCSA Mosaic的开发人员来开发一个新的浏览器Netscape Navigator,想要取代NCSA Mosaic成为世界第一的浏览器。也正如创始人所想,四个月内就占据了3/4的市场,成为90年代的主要浏览器。

1995年,网景公司招募了布兰登·艾克,目标是把Scheme语言嵌入到Netscape Navigator浏览器当中。而布兰登花了10天就写出了JavaScript的最初版本。

1995年,JavaMocha一起发布,公之于众。

68747470733a2f2f636c6475702e636f6d2f78465646784f696f41552e737667.svg

最初给这个语言命名为Mocha,因为当年网景公司和开发Java的公司有合作(想方设法蹭Java流量),所有才有了Mocha的名字(摩卡咖啡)。

1995年9月,更名为LiveScript,12月份,正式命名为JavaScript

在1996年的11月,网景公司向ECMA提交语言标准。

1997年6月,ECMAJavaScript语言为基础制定了ECMAScript标准规范ECMA-262

JavaScript的十个设计缺陷

因为JavaScript设计的时候仅用了10天完成初版的设计,布兰登可能也是出于应付的态度,再加上标准化的时间太短了,没办法进行较好的调整就定型了(相比之下,C语言问世将近20年之后,国际标准才颁布。),所以使得缺陷较多。

1. 不适合开发大型程序

Javascript没有名称空间(namespace),很难模块化;没有如何将代码分布在多个文件的规范;允许同名函数的重复定义,后面的定义可以覆盖前面的定义,很不利于模块化加载。

2. 非常小的标准库

Javascript提供的标准函数库非常小,只能完成一些基本操作,很多功能都不具备。

3. null和undefined

null属于对象(object)的一种,意思是该对象为空;undefined则是一种数据类型,表示未定义。

4. 全局变量难以控制

Javascript的全局变量,在所有模块中都是可见的;任何一个函数内部都可以生成全局变量,这大大加剧了程序的复杂性。

5. 自动插入行尾分号

Javascript的所有语句,都必须以分号结尾。但是,如果你忘记加分号,解释器并不报错,而是为你自动加上分号。有时候,这会导致一些难以发现的错误。

6. 加号运算符

'+'号作为运算符,有两个含义,可以表示数字与数字的和,也可以表示字符与字符的连接。 (这个大家应该深有体会吧

7. NaN

NaN是一种数字,表示超出了解释器的极限。

8. 数组和对象的区分

由于Javascript的数组也属于对象(object),所以要区分一个对象到底是不是数组,相当麻烦。

9. == 和 ===

'==' 用来判断两个值是否相等。当两个值类型不同时,会发生自动转换,得到的结果非常不符合直觉。 而'==='不仅仅是值,也把类型拿出来对比,这个判断是最精确的。

10. 基本类型的包装对象

Javascript有三种基本数据类型:字符串、数字和布尔值。它们都有相应的建构函数,可以生成字符串对象、数字对象和布尔值对象。与基本数据类型对应的对象类型,作用很小,造成的混淆却很大。

这些就不过多赘述了,详情看下面的的第一个连接

这篇文章引用阮一峰的网络日志和维基百科

www.ruanyifeng.com/blog/2011/0…

zh.wikipedia.org/zh-cn/JavaS…