您的位置:首页 > Web前端 > JavaScript

JavaScript语言精粹【糟粕、毒瘤】

2015-03-28 15:45 246 查看

八、糟粕

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: