八、糟粕

JavaScript中存在一些有问题的特性,有时我们往往大意出错!

1. 比较运算符

==:会强制转换 -->不建议使用
===:两个运算数类型一致且有相同的值 -->建议使用

2. with

严重影响了JavaScript处理器的速度,阻断了变量名的词法作用域绑定
实例:
with(obj){
	a=b;
}
本意:obj.a=obj.b,等价于
if(obj.a === undefined){
	a = obj.b===undefined?b:obj.b;
}else{
	obj.a = obj.b===undefined?b:obj.b;
}

3. continue

跳到循环顶部,一段代码重构移除continue后,性能大幅度提升

4. switch:小心case条件穿越

5. ++ --:易导致溢出错误

6. 位运算符

由于JavaScript只有双精度浮点数,所以处理整数过程如下(性能低):
浮点数 --> 整数 --> 执行运算 --> 浮点数

7. function语句&function表达式

语句:function foo(){...}
表达式:var foo = function foo(){...}
function语句解析时,会被移动到定义时所在作用域的顶层,放宽了先声明后使用的要求,从而容易导致混乱。
注意点:
语句不能以function开头,在JavaScript中以function开头的语句是一个function语句,解决方案:
(function(){...}());

8. new

与new结合使用的函数应以首字符大写形式命名。
忘记使用new得到的是一个普通函数,this被绑定到全局对象,而不是新创建的对象。这意味着当你的函数尝试去初始化新成员属性时将污染全局变量。

九、毒瘤

1. typeof

typeof null --> 'undefined'
if(my_value && typeof my_value === 'object'){
	//对象或数组
}

2. parseInt

遇到非数字会停止解析
parseInt("16");与parseInt("16tons");结果一样
如果字符串第1个字符时0,该字符串会基于八进制求值(日期时间会遇到):
parseInt("08"); //0,因为8在八进制为非数值

建议:parseInt("08",10); //8