别了 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 相关文章推荐
JavaScript 中的replace方法说明
Apr 13 Javascript
javascript中最常用的继承模式 组合继承
Aug 12 Javascript
JavaScript数据类型检测代码分享
Jan 26 Javascript
js实现表单Radio切换效果的方法
Aug 17 Javascript
JavaScript判断表单为空及获取焦点的方法
Feb 12 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
Jul 12 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
Oct 11 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Dec 15 Javascript
bootstrap下拉菜单使用方法解析
Jan 13 Javascript
基于JavaScript实现的快速排序算法分析
Apr 14 Javascript
微信小程序实现添加手机联系人功能示例
Nov 30 Javascript
jquery选择器和属性对象的操作实例分析
Jan 10 jQuery
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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
php实现的仿阿里巴巴实现同类产品翻页
2009/12/11 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
详解Node.Js如何处理post数据
2016/09/19 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
Python中属性和描述符的正确使用
2016/08/23 Python
python机器学习理论与实战(四)逻辑回归
2018/01/19 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
PyQt5实现画布小程序
2020/05/30 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
解决Pyinstaller打包软件失败的一个坑
2021/03/04 Python
新闻学专业应届生求职信
2013/11/08 职场文书
小学英语教学反思
2014/01/30 职场文书
金融管理应届生求职信
2014/02/20 职场文书
规范化管理年活动总结
2014/08/29 职场文书
违反单位工作制度检讨书
2014/10/25 职场文书
Python数据分析之pandas函数详解
2021/04/21 Python
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python