JavaScript语言精粹【糟粕、毒瘤】
2015-03-28 15:45
176 查看
八、糟粕
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
相关文章推荐
- JavaScript语言精粹【糟粕、毒瘤】
- JavaScript 语言精粹 学习笔记
- javascript语言精粹-------------------------读书笔记
- javascript语言精粹。3、对象;4、函数;深入原型链,对象的原理!
- javascript 语言精粹 笔记推荐。。
- JavaScript语言精粹学习笔记(3)——函数1
- 推荐阅读《JavaScript 语言精粹》
- 《JavaScript 语言精粹》 学习笔记 —— 第五章 继承
- 《JavaScript 语言精粹》 学习笔记 —— 第八章 方法
- javascript 语言精粹 学习笔记
- JavaScript 语言精粹的笔记
- 《JavaScript 语言精粹》 学习笔记 —— 第二章 语法
- 《JavaScript 语言精粹》 学习笔记 —— 第五章 继承
- JavaScript语言精粹之对象
- 《JavaScript 语言精粹》 学习笔记 —— 第八章 方法
- JavaScript语言精粹--执行环境及作用域,this
- JavaScript 语言精粹 学习笔记
- 《JavaScript 语言精粹》 学习笔记 —— 第二章 语法
- 《JavaScript 语言精粹》 学习笔记 —— 第六章 数组
- javascript语言中的毒瘤(下)