0、导言

JavaScript中有许多难以避免的问题特性。接下来就一一揭示。

1、全局变量

在所有JavaScript的糟糕特性中,最为糟糕的就是全局变量的依赖。全局变量使得在同一个程序中运行独立的子程序变得更难。

2、作用域

JavaScript是类C的语法,但是却没有提供类C的块级作用域。

3、自动插入分号

JavaScript有一个自动修复机制,会试图通过自动插入分号来修正有缺损的程序,但是它有可能掩盖更为严重的错误。

4、保留字

有太多的单词在JavaScript中被保留,它们不能用来命名变量或者函数(在大部分执行环境下,部分关键字是可用的)。

5、Unicode字符

JavaScript设计之初,Unicode预计只会有65536个字符。实际上,到现在Unicode有多大百万个字符。这也就导致了JavaScript会认为一对字符是两个不同的字符(Unicode把一对字符视为一个单一的字符)

6、typeof

不要指望typeof返回的类型。比如null或者是检测对象,另外检测正则可能会返回function或者是object。

7、parseInt

parseInt把一个字符串转换为整数,会在遇到非数字时停止解析。另外如果第一个字符是0,还会按照8进制来取值。

8、运算符(+)

+运算符可以用于加法运算或者是字符串连接,究竟如何执行会取决于其参数类型。

9、 浮点数

二进制浮点数不能正确的处理十进制小数,因此0.1+0.2 不等于0.3。

10、NaN

NaN是一个特殊的数量值,它表示不是一个数字。也是唯一一个不等于自身的JavaScript数值。

11、伪数组

JavaScript没有真正的数组,就连Array也是通过object来模拟的,如果完全达不到真正的数组的地步。同时typeof运算符也不能辨别数组和对象。

12、假值

JavaScript中包含诸多的假值,如: 0, NaN, '', false, null, undefined

13、hasOwnProperty

hasOwnProperty方法被用做一个过滤器来避开for..in语句的隐患,但hasOwnProperty是一个普通的方法,所以是可以被重写的。

14、对象

JavaScript的对象,永远不会是真的空对象,因为可以从原形链取得成员属性。