JavaScript之毒瘤
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的对象,永远不会是真的空对象,因为可以从原形链取得成员属性。