别了 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 相关文章推荐
XHTML-Strict 内允许出现的标签
Dec 11 Javascript
document.getElementById的简写方式(获取id对象的简略写法)
Sep 10 Javascript
Ext 今日学习总结
Sep 19 Javascript
基于Jquery的文字自动截取(提供源代码)
Aug 09 Javascript
浅析javascript操作 cookie对象
Dec 26 Javascript
js实现商城星星评分的效果
Dec 29 Javascript
BootStrap中Table分页插件使用详解
Oct 09 Javascript
vue双向数据绑定原理探究(附demo)
Jan 17 Javascript
AngularJS之页面跳转Route实例代码
Mar 10 Javascript
Angular2 之 路由与导航详细介绍
May 26 Javascript
基于jQuery Easyui实现登陆框界面
Jul 10 jQuery
详解关于微信setData回调函数中的坑
Feb 18 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
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
一个网页标题title的闪动提示效果实现思路
2014/03/22 Javascript
javascript检查浏览器是否支持flash的实现代码
2014/08/14 Javascript
Javascript的闭包详解
2014/12/26 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
全面了解js中的script标签
2016/07/04 Javascript
微信小程序中做用户登录与登录态维护的实现详解
2017/05/17 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
2018/08/30 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
Python可变参数函数用法实例
2015/07/07 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
python+opencv实现的简单人脸识别代码示例
2017/11/14 Python
Python AES加密实例解析
2018/01/18 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
业务经理岗位职责
2013/11/11 职场文书
上课迟到检讨书
2014/01/19 职场文书
考试没考好检讨书
2014/01/31 职场文书
如何写一封打动人心的求职信
2014/02/17 职场文书
医药销售自荐书
2014/05/29 职场文书
园林专业毕业生自荐信
2014/07/04 职场文书
最美护士演讲稿
2014/08/27 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
2014幼儿教师个人工作总结
2014/12/03 职场文书
党员自我评价2015
2015/03/03 职场文书
python turtle绘制多边形和跳跃和改变速度特效
2022/03/16 Python
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL