《JavaScript语言精粹》附录-毒瘤

那会在一言一行中证明其可怕。
————威廉-莎士比亚

以下是JavaScript中一些难以避免的问题特性!

全局变量

JS对全局变量的依赖,是最糟糕的一个特性。JS没有链接器(linker),所有的编译单元都载入一个公共全局对象中。
共有3种方式定义全局变量:

  1. 在任何函数之外放置一个var语句

    1
    var foo=value;
  2. 直接给全局对象添加一个属性。全局对象是所有全局变量的容器。在web浏览器中,全局对象名是window

    1
    window.foo=value;
  3. 直接使用未声明的变量,被称为隐式的全局变量

    1
    foo=value;

块级作用域

没有块级作用域:代码块中声明的变量在包含此代码块的函数的任何位置都是可见的。

自动插入分号

JS会有一个自动修复机制,它试图通过自动插入分号来修正有缺损的程序。但不要指望它,一个语句的结尾,一定要带上分号;

typeof

1
typeof null

返回object而不是null!!

1
typeof /a/

返回object而不是regexp!!

parseInt

parseInt是一个把字符串转换成整数的函数。它遇到非数字时会停止解析。
如果该字符串第1个字符是0,那么会基于八进制求值。所有最好加上第二个基数参数!

浮点数

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

NaN

NaN表示的不是一个数字。但是:

1
typeof NaN === "number"  //true

typeof不能识别数字和NaN,而且NaN也不等于自己。
检查数字的函数

1
2
3
var isNumber=function(num){
return typeof num === "number"&& isFinite(num);
}

对象

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

liborn wechat
欢迎您扫一扫上面的微信二维码,订阅我的公众号!