首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript语言精粹【糟粕、毒瘤】

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

作者头像
奋飛
发布2019-08-15 16:11:45
3770
发布2019-08-15 16:11:45
举报
文章被收录于专栏:Super 前端Super 前端Super 前端

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://ligang.blog.csdn.net/article/details/44702063

八、糟粕

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年03月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 八、糟粕
    • 1. 比较运算符
      • 2. with
        • 3. continue
          • 4. switch:小心case条件穿越
            • 5. ++ --:易导致溢出错误
              • 6. 位运算符
                • 7. function语句&function表达式
                  • 8. new
                  • 九、毒瘤
                    • 1. typeof
                      • 2. parseInt
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档