zoukankan      html  css  js  c++  java
  • JavaScript各变量类型的判断方法

    我们很容易被漂亮的代码吸引,也不知不觉的在自己的代码库中加入这些。却没有冷静的想过它们的优劣。这不,我就收集了一系列形如 "是否为……?" 的判断的boolean函数。

    isNull: function(a){
    	return a === null;
    },
    isUndefined: function(a){
    	return a === undefined;
    },
    isNumber: function(a){
    	return typeof a === 'number';
    },
    isString: function(a){
    	return typeof a === 'string';
    },
    isBoolean: function(a){
    	return typeof a === 'boolean';
    },
    isPrimitive: function(b){
    	var a = typeof b;
    	return !!(b === undefined || b === null || a == 'boolean' || a == 'number' || a == 'string');		
    },
    isArray: function(a){
    	return proto_obj.toString.call(a) === '[object Array]';
    },
    isFunction: function(a){
    	return proto_obj.toString.call(a) === '[object Function]';
    },
    isPlainObject: function(o){
    	if (!o || o === win || o === doc || o === doc.body) {
    		return false;
    	}
    	return 'isPrototypeOf' in o && proto_obj.toString.call(o) === '[object Object]';		
    },
    isWindow: function(o){
    	return o && typeof o === 'object' && 'setInterval' in o;
    },
    isEmptyObject: function(o){
        for(var a in o) {
    	return false;
        }
        return true;
    }
    

    以上isXX系列中,isUndefined在类库中用的最多。如判断是否传入了某个参数,判断对象是否拥有某个属性等等。但这个函数是不必存在,我已将其移除。理由如下

    1. isUndefined 与 使用全等(===)或typeof 多了一层函数调用。很明显多一层函数调用比直接使用原生的运算符效率会低(虽然有些微不足道),但如果isUndefined调用次数很多如上万次还是很 明显的。我曾经在邮箱框架中加入了该函数,调用次数有4000多次,从性能分析工具看占用了近1%的时间。仅仅一个判断占1%的调用时间还是很可怕的。当 然,邮箱框架内的isUndefined处在多层闭包的顶层,访问其也会占用较多时间。如果这一条还不足以让你放弃isUndefined,请看下面。
    2. 函数从一定程度上是对一些代码的封装,抽象。是组织良好代码的方式之一,且有利于降低代码的复杂性。但isNull/isUndefined/isBoolean/isNumber/isString函数内仅有一句,抽象层次很低。因此完全不必封装而提取出一个函数。
    3. isUndefined(a) 与 a === undefined相比并不会节省几个字节(呵,你可以命名的更短但损失了可读性)。

    综上,我去掉了类库中对基本类型判断的isNull/isUndefined/isBoolean/isNumber/isString,需要用到这些判断的时候直接使用typeof运算符等。

  • 相关阅读:
    kibana操作
    git使用入门
    ES增删改查
    MySQL&ES连接池
    java递归生成树结构的数据
    lambda新特性,对两组集合中相同的数据去重
    java8新特性 LocalDateTime,LocalDate ,LocalTime 使用,Period 获取时间差
    photoshop安装包
    java自定义异常及异常的抛出
    git回滚到任意版本
  • 原文地址:https://www.cnblogs.com/xiaoyang002/p/4047326.html
Copyright © 2011-2022 走看看