别了 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 相关文章推荐
070823更新的一个[消息提示框]组件 兼容ie7
Aug 29 Javascript
走出JavaScript初学困境—js初学
Dec 29 Javascript
javascript小数四舍五入多种方法实现
Dec 23 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
Oct 10 Javascript
基于jquery实现发送文章到手机的代码
Dec 26 Javascript
Angular用来控制元素的展示与否的原生指令介绍
Jan 07 Javascript
js中的DOM模拟购物车功能
Mar 22 Javascript
Vue实现路由跳转和嵌套
Jun 20 Javascript
vue里面父组件修改子组件样式的方法
Feb 03 Javascript
koa源码中promise的解读
Nov 13 Javascript
Vue插件之滑动验证码
Sep 21 Javascript
vue.js实现简单购物车功能
May 30 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/11/16 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
2014/07/29 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
document对象execCommand的command参数介绍
2006/08/01 Javascript
javascript FormatNumber函数实现方法
2008/12/30 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
JQuery标签页效果实例详解
2015/12/24 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
基于vue 动态加载图片src的解决方法
2018/02/05 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
2020/06/07 Javascript
简明 Python 基础学习教程
2007/02/08 Python
Python中规范定义命名空间的一些建议
2016/06/04 Python
Python实现注册登录系统
2017/08/08 Python
Python设计模式之门面模式简单示例
2018/01/09 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
Pycharm如何自动生成头文件注释
2020/11/14 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
业务代表的岗位职责
2013/11/16 职场文书
人事部专员岗位职责
2014/03/04 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
现役军人家属慰问信
2015/03/24 职场文书
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫