别了 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 相关文章推荐
jQuery EasyUI 开源插件套装 完全替代ExtJS
Mar 24 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
Oct 20 Javascript
jqplot通过ajax动态画折线图的方法及思路
Dec 08 Javascript
JavaScript页面模板库handlebars的简单用法
Mar 02 Javascript
Angular路由简单学习
Dec 26 Javascript
微信小程序 picker-view 组件详解及简单实例
Jan 10 Javascript
Angular 4.X开发实践中的踩坑小结
Jul 04 Javascript
基于easyui checkbox 的一些操作处理方法
Jul 10 Javascript
.vue文件 加scoped 样式不起作用的解决方法
May 28 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
Aug 20 Javascript
浅谈vue2的$refs在vue3组合式API中的替代方法
Apr 18 Vue.js
AudioContext 实现音频可视化(web技术分享)
Feb 24 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
其他功能
2006/10/09 PHP
php 数组的创建、调用和更新实现代码
2009/03/09 PHP
详解php中反射的应用
2016/03/15 PHP
完美解决thinkphp唯一索引重复时出错的问题
2017/03/31 PHP
javascript中检测变量的类型的代码
2010/12/28 Javascript
javascripit实现密码强度检测代码分享
2013/12/12 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
微信小程序 slider 详解及实例代码
2017/01/10 Javascript
JS实现的简单图片切换功能示例【测试可用】
2017/02/14 Javascript
js实现京东轮播图效果
2017/06/30 Javascript
JS中的防抖与节流及作用详解
2019/04/01 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
vant 时间选择器--开始时间和结束时间实例
2020/11/04 Javascript
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
python处理按钮消息的实例详解
2017/07/11 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
python解决OpenCV在读取显示图片的时候闪退的问题
2021/02/23 Python
加拿大花店:1800Flowers.ca
2016/11/16 全球购物
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
《分一分》教学反思
2014/04/13 职场文书
村居抓节水倡议书
2014/05/19 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
教师一帮一活动总结
2014/07/08 职场文书
购房委托书范本
2014/09/18 职场文书
小班教师个人总结
2015/02/05 职场文书
产品质量保证书范本
2015/02/27 职场文书
给朋友的道歉短信
2015/05/12 职场文书
在人间读书笔记
2015/06/30 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书