别了 JavaScript中的isXX系列


Posted in Javascript onAugust 01, 2012
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运算符等。

Javascript 相关文章推荐
JavaScript获取GridView选择的行内容
Apr 14 Javascript
javascript 控制 html元素 显示/隐藏实现代码
Sep 01 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
Dec 28 Javascript
使用jQuery在对象中缓存选择器的简单方法
Jun 30 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
Jun 08 Javascript
javascript获取以及设置光标位置
Feb 16 Javascript
js CSS3实现卡牌旋转切换效果
Jul 04 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
Jun 26 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
Sep 27 Javascript
2种在vue项目中使用百度地图的简单方法
Sep 28 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
Oct 16 Javascript
JavaScript提升机制Hoisting详解
Oct 23 Javascript
JS判断元素为数字的奇异写法分享
Aug 01 #Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
Aug 01 #Javascript
jQuery源码中的chunker 正则过滤符分析
Jul 31 #Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
Jul 31 #Javascript
基于jquery的点击链接插入链接内容的代码
Jul 31 #Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
Jul 31 #Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
Jul 31 #Javascript
You might like
Adodb的十个实例(清晰版)
2006/12/31 PHP
PHP mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
JS 的应用开发初探(mootools)
2009/12/19 Javascript
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
js实现动态显示时间效果
2017/03/06 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
解决vue init webpack 下载依赖卡住不动的问题
2020/11/09 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
Python 除法小技巧
2008/09/06 Python
python基础教程之常用运算符
2014/08/29 Python
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
Python中类型检查的详细介绍
2017/02/13 Python
Python上下文管理器和with块详解
2017/09/09 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
html5-websocket基于远程方法调用的数据交互实现
2012/12/04 HTML / CSS
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
教师节倡议书
2014/08/30 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
小学数学教师研修日志
2015/11/13 职场文书
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL
python 详解turtle画爱心代码
2022/02/15 Python