为什么Javascript有设计缺陷?
这里有三个客观原因,导致Javascript的设计不够完善。
- 设计阶段过于仓促
Javascript的设计,其实只用了十天。而且,设计师是为了向公司交差,本人并不愿意这样设计 - 没有先例
Javascript同时结合了函数式编程和面向对象编程的特点,这很可能是历史上的第一例。 - 过早的标准化
Javascript的发展非常快,根本没有时间调整设计。
十个缺陷
这里只说设计之初时,绝大部分已经解决
- 不适合开发大型程序
- Javascript,很难模块化;没有如何将代码分布在多个文件的规范;允许同名函数的重复定义,后面的定义可以覆盖前面的定义,很不利于模块化加载。
- 非常小的标准库
- Javascript提供的标准函数库非常小,只能完成一些基本操作,很多功能都不具备。
- null和undefined
- 两者非常容易混淆,但是含义完全不同。
- 在编程实践中,null几乎没用,根本不应该设计它。
- 全局变量难以控制
- 自动插入行尾分号
- 加号运算符
- +号作为运算符,有两个含义,可以表示数字与数字的和,也可以表示字符与字符的连接。
- NaN
- 与其设计NaN,不如解释器直接报错,反而有利于简化程序。
- 数组和对象的区分
- 由于Javascript的数组也属于对象(object),所以要区分一个对象到底是不是数组,相当麻烦
- == 和 ===
- ==用来判断两个值是否相等。当两个值类型不同时,会发生自动转换,得到的结果非常不符合直觉。
- 因此,推荐任何时候都使用"==="(精确判断)比较符。
- 基本类型的包装对象
- Javascript有三种基本数据类型:字符串、数字和布尔值。它们都有相应的建构函数,可以生成字符串对象、数字对象和布尔值对象。
- 与基本数据类型对应的对象类型,作用很小,造成的混淆却很大。