zoukankan      html  css  js  c++  java
  • Javascript语言精粹-毒瘤和糟粕

    作者:zccst
    Javascript是一门语言,用久了肯定能够发现其中的好与不好的地方。不过大多数普通人没那么细心,所以也就忽略了,很难说出一二三来。但对于极客版的牛人就不同了,他们理解的远比普通人透彻。



    二、糟粕(轻微)





    一、毒瘤(严重)
    1,全局变量
    var foo = value;
    window.foo = value;
    foo = value;
    隐患是很多时候是忘加var了


    2,作用域
    没有块级作用域,所以最好在开头部分声明所有变量。
    而不是其他语言延迟声明。

    3,自动插入分号
    return
    {
    };
    改成 return {
    }

    4,保留字
    用在对象的key时,保留字需要加引号
    不能用在点表示法中。

    5,Unicode
    Unicode把一对字符视为单一的字符,而js认为一对字符是两个不同的字符。

    6,typeof
    typeof null 返回的是object,以致无法判断到底是null,还是空对象。
    对于null,可以用 my_value === null
    对于空对象,用 if(my_value && typeof my_value === null){}

    7,parseInt
    遇到非数字会自动截掉,所以parseInt("16")与parseInt("16 tons")结果相同。
    parseInt("16", 10);//因为遇0开头总认为是8进制,所以最好总加上基数参数。

    8,浮点数
    0.1+0.2不等于0.3,所以最好先乘以100,算完后再除以100

    9,NaN
    //isNaN() 函数用于检查其参数是否是非数字值。
    //isFinite() 函数用于检查其参数是否是无穷大
    typeof NaN === 'number'; //true
    判断是否是一个数字,可以用:
    var isNumber = function (value){
        return typeof value === 'number' && isFinite(value);
    }

    10,伪数组
    typeof不能辨别数组和对象。要判断一共值是否为数组,还需要检查他的constructor属性:
    if(my_value && typeof my_value === 'object' && my_value.constructor === Array){
        //my_value是一共数组
    }

    11,假值
    0          ->  Number
    NaN        ->  Number
    ''         ->  String
    false      ->  Boolean
    null       ->  Object
    undefined  ->  Undefined

    12,hasOwnProperty
    由于hasOwnProperty是一共方法,而不是一个运算符,所以在任何对象中,他可能会被一个不同的函数甚至一个非函数的值所替换:
    var another_stooge.hasOwnProperty = null; //地雷
    for (var name in another_stooge){
        if ( another_stooge.hasOwnProperty(name) ) {//触雷
            document.writeln( name + ': '+another_stooge[name] );
        }
    }

    13,对象
    由于对象永远不会是真的空对象,因为他们可以从原型链中取得成员属性。有时那会带来麻烦。例如计算一段文斌每个单词出现次数。此时单词种可能包含constructor等关键词导致计算异常。
    例子详见原书。

  • 相关阅读:
    那一定都是你的错!- 一次FastDFS并发问题的排查经历
    程序员和烟民
    Spring Boot(十六):使用 Jenkins 部署 Spring Boot
    阿里Dubbo疯狂更新,关Spring Cloud什么事?
    从架构演进的角度聊聊Spring Cloud都做了些什么?
    FastDFS 集群 安装 配置
    中小型互联网公司微服务实践-经验和教训
    jvm系列(十一):JVM演讲PPT分享
    jvm系列(十):如何优化Java GC「译」
    Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增删改查示例
  • 原文地址:https://www.cnblogs.com/shsgl/p/4289920.html
Copyright © 2011-2022 走看看