版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://ligang.blog.csdn.net/article/details/44702063
JavaScript中存在一些有问题的特性,有时我们往往大意出错!
==:会强制转换 -->不建议使用 ===:两个运算数类型一致且有相同的值 -->建议使用
严重影响了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;
}
跳到循环顶部,一段代码重构移除continue后,性能大幅度提升
由于JavaScript只有双精度浮点数,所以处理整数过程如下(性能低): 浮点数 --> 整数 --> 执行运算 --> 浮点数
语句:function foo(){...} 表达式:var foo = function foo(){...} function语句解析时,会被移动到定义时所在作用域的顶层,放宽了先声明后使用的要求,从而容易导致混乱。 注意点: 语句不能以function开头,在JavaScript中以function开头的语句是一个function语句,解决方案: (function(){...}());
与new结合使用的函数应以首字符大写形式命名。 忘记使用new得到的是一个普通函数,this被绑定到全局对象,而不是新创建的对象。这意味着当你的函数尝试去初始化新成员属性时将污染全局变量。
typeof null --> 'undefined'
if(my_value && typeof my_value === 'object'){
//对象或数组
}
遇到非数字会停止解析 parseInt("16");与parseInt("16tons");结果一样 如果字符串第1个字符时0,该字符串会基于八进制求值(日期时间会遇到): parseInt("08"); //0,因为8在八进制为非数值
建议:parseInt("08",10); //8