诞生
1995年5月,JavaScript在Brendan Eich的手上诞生了,然而这个设计过程仅仅历经了十天……
- 1995年Sun公司将Oak语言改名为Java,正式向市场推出。
- 1995年5月,网景公司做出决策,未来的网页脚本语言必须"看上去与Java足够相似",但是比Java简单,使得非专业的网页作者也能很快上手。
- BrendanEich被指定为这种"简化版Java语言"的设计师。但是,他对Java一点兴趣也没有。为了应付公司安排的任务,他只用10天时间就把Javascript设计出来了。
总的来说,他的设计思路是这样的:
(1)借鉴C语言的基本语法;
(2)借鉴Java语言的数据类型和内存管理;
(3)借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;
(4)借鉴Self语言,使用基于原型(prototype)的继承机制。
标准化
- 1995年5月,设计方案定稿;
- 10月,解释器开发成功;
- 12月,向市场推出,立刻被广泛接受,全世界的用户大量使用。
- 1996年8月,微软公司强势介入,宣布推出自己的脚本语言Jscript;
- 11月,为了压制微软,网景公司决定申请Javascript的国际标准;1997年6月,第一个国际标准ECMA-262正式颁布。也就是说,Javascript推出一年半之后,国际标准就问世了。
也就是说,Javascript推出一年半之后,国际标准就问世了
缺陷
由于设计阶段过于仓促,没有先例,再加上过早的标准化,设计缺陷便逐渐暴露出来。
- 不适合开发大型程序
- 非常小的标准库,很多功能都不具备。
- null和undefined两者非常容易混淆,但是含义完全不同。在编程实践中,null几乎没用,根本不应该设计它。
- 全局变量难以控制,任何一个函数内部都可以生成全局变量,这大大加剧了程序的复杂性。
- 自动插入行尾分号,avascript的所有语句,都必须以分号结尾。但是,如果你忘记加分号,解释器并不报错,而是为你自动加上分号。有时候,这会导致一些难以发现的错误。
- 加号运算符有两个含义,可以表示数字与数字的和,也可以表示字符与字符的连接。如果一个操作项是字符,另一个操作项是数字,则数字自动转化为字符。不必要地加剧了运算的复杂性。
- 与其设计NaN,不如解释器直接报错,反而有利于简化程序。
- 要区分一个对象到底是不是数组,相当麻烦。
- == 和 ===,==判断,当两个值类型不同时,会发生自动转换,得到的结果非常不符合直觉。
- 与基本数据类型对应的对象类型,作用很小,造成的混淆却很大。