别了 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 相关文章推荐
js脚本学习 比较实用的基础
Sep 07 Javascript
jquery实现动态菜单的实例代码
Nov 28 Javascript
jquery、js操作checkbox全选反选
Mar 12 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
Jan 28 Javascript
js基础之DOM中document对象的常用属性方法详解
Oct 28 Javascript
移动端日期插件Mobiscroll.js使用详解
Dec 19 Javascript
jQuery设置图片等比例缩小的方法
Apr 29 jQuery
angular中ui calendar的一些使用心得(推荐)
Nov 03 Javascript
vue利用axios来完成数据的交互
Mar 23 Javascript
jQuery轻量级表单模型验证插件
Oct 15 jQuery
微信小程序实现锚点功能
Nov 20 Javascript
JS实现简易留言板增删功能
Feb 08 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
php你的验证码安全码?
2007/01/02 PHP
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
javascript 面向对象 function类
2010/05/13 Javascript
javascript基础之查找元素的详细介绍(访问节点)
2013/07/05 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
Nodejs抓取html页面内容(推荐)
2016/08/11 NodeJs
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
详解babel升级到7.X采坑总结
2019/05/12 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
[46:14]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
利用python画出折线图
2018/07/26 Python
pyqt5 使用label控件实时显示时间的实例
2019/06/14 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
基于python检查SSL证书到期情况代码实例
2020/04/04 Python
详解html5 postMessage解决跨域通信的问题
2018/08/17 HTML / CSS
美国最受欢迎的度假租赁网站:VRBO
2016/08/02 全球购物
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
微软巴西官方网站:Microsoft Brasil
2019/09/26 全球购物
用友笔试题目
2016/10/25 面试题
大型活动组织方案
2014/05/10 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS