JavaScript中的isXX系列是否继续使用的分析

 更新时间:2011年04月16日 23:30:56   作者:  
我们很容易被漂亮的代码吸引,也不知不觉的在自己的代码库中加入这些。却没有冷静的想过它们的优劣。这不,我就收集了一系列形如 “是否为……?” 的判断的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运算符等。

相关文章

  • 使用layui前端框架弹出form表单以及提交的示例

    使用layui前端框架弹出form表单以及提交的示例

    今天小编就为大家分享一篇使用layui前端框架弹出form表单以及提交的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • 微信小程序实现自定义拍摄组件

    微信小程序实现自定义拍摄组件

    这篇文章主要为大家详细介绍了微信小程序实现自定义拍摄组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 12种JavaScript常用的MVC框架比较分析

    12种JavaScript常用的MVC框架比较分析

    这篇文章主要介绍了12种JavaScript常用的MVC框架比较分析,以独特的视角分析了12中常见的JavaScript MVC框架各种优缺点,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • javascript实现rgb颜色转换成16进制格式

    javascript实现rgb颜色转换成16进制格式

    本文给大家分享的是使用javascript实现rgb颜色转换成16进制格式的方法和示例代码,有需要的小伙伴可以参考下。
    2015-07-07
  • PHP abstract与interface之间的区别

    PHP abstract与interface之间的区别

    本文是对PHP中abstract与interface之间的区别进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • JavaScript避免嵌套代码浅析

    JavaScript避免嵌套代码浅析

    这篇文章主要介绍了JavaScript避免嵌套代码,很多时候需要编写的逻辑本身就很恶心, 乍看之下, 堆页岩般的判定嵌套里似乎每一层都是必要的, 也只能说尽量让它看起来不那么恶心
    2023-02-02
  • js中Math之random,round,ceil,floor的用法总结

    js中Math之random,round,ceil,floor的用法总结

    本篇文章是对js中Math之random,round,ceil,floor的用法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • JS关键字球状旋转效果的实例代码

    JS关键字球状旋转效果的实例代码

    这篇文章主要介绍了JS关键字球状旋转效果的实例代码。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • 新手快速入门JavaScript装饰者模式与AOP

    新手快速入门JavaScript装饰者模式与AOP

    这篇文章主要介绍了新手快速入门JavaScript装饰者模式与AOP,在不改变对象)的情况下动态的为其添加功能,这就是装饰者模式,下面小编带大家来深入学习一下吧
    2019-06-06
  • Javascript实现购物车功能的详细代码

    Javascript实现购物车功能的详细代码

    这篇文章使用js实现购物车的价格计算,商品数量更换,商品删除等功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05

最新评论