别了 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 相关文章推荐
两个DIV等高的JS的实现代码
Dec 23 Javascript
js控制table合并具体实现
Feb 20 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
May 06 Javascript
jQuery实现自动调整字体大小的方法
Jun 15 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
Oct 19 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖放商品放置购物车
Nov 30 Javascript
jqGrid表格应用之新增与删除数据附源码下载
Dec 02 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
Jan 20 Javascript
解决vue-cli中stylus无法使用的问题方法
Jun 19 Javascript
JavaScript中var、let、const区别浅析
Jun 24 Javascript
小程序云开发之用户注册登录
May 18 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
Aug 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的面试题集
2006/11/19 PHP
php inc文件使用的风险和注意事项
2013/11/12 PHP
smarty模板引擎中变量及变量修饰器用法实例
2015/01/22 PHP
php生成zip文件类实例
2015/04/07 PHP
php获取微信openid方法总结
2019/10/10 PHP
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
angularjs select 赋值 ng-options配置方法
2018/02/28 Javascript
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
python3生成随机数实例
2014/10/20 Python
Python使用爬虫猜密码
2016/02/19 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
Python类super()及私有属性原理解析
2020/06/15 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
白色公司:The White Company
2017/10/11 全球购物
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
你懂得怎么写自荐信吗?
2013/12/27 职场文书
后备干部考察材料
2014/02/12 职场文书
舞蹈教育学专业求职信
2014/06/29 职场文书
先进基层党组织事迹材料
2014/12/25 职场文书
小学教师党员承诺书
2015/04/27 职场文书
小学运动会报道稿
2015/07/22 职场文书
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python