我们很容易被漂亮的代码吸引,也不知不觉的在自己的代码库中加入这些。却没有冷静的想过它们的优劣。这不,我就收集了一系列形如 "是否为……?" 的判断的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运算符等。

最新文章

  1. Reactor by Example--转
  2. NSIS 打包脚本基础
  3. [Erlang 0129] Erlang 杂记 VI
  4. python之选课系统详解[功能未完善]
  5. Centos7中systemctl命令详解
  6. boost any库
  7. 创建Xml文件与修改Xml文件
  8. vb小菜一枚--------早期绑定和后期绑定
  9. Android View各种尺寸位置相关的方法探究
  10. bigworld源码分析(2)—— loginApp分析
  11. VMware宿主机和虚拟机的网络连接问题
  12. 51单片机C语言学习笔记4:keil C51绝对地址访问
  13. matlab配置Libsvm 防止备忘录
  14. 5.关于QT中的网络编程,QTcpSocket,QUdpSocket
  15. linux下连接windows的远程桌面
  16. 京东618:Docker扛大旗,弹性伸缩成重点 (2015-06-23)
  17. php三级联动(html,php两个页面)
  18. 使用安装脚本安装Texlive
  19. Android中使用Lambda表达式开发
  20. Kotlin语言学习笔记(6)

热门文章

  1. javascript遍历方法总结
  2. php集成开发环境xampp的搭建
  3. #Python编程从入门到实践#第三章笔记
  4. random模块 time模块的用法 python
  5. 理解JAVA与C的运行机制
  6. MySQL 5.7远程连接
  7. 生成heap dump
  8. hive原理
  9. svn Previous operation has not finished; run 'cleanup' if it was interrupted
  10. Java基本数据类型总结二