别了 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 相关文章推荐
如何取得中文输入的真实长度?
Jun 24 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
Dec 04 Javascript
javascript查询字符串参数的方法
Jan 28 Javascript
AngularJs  Using $location详解及示例代码
Sep 02 Javascript
原生js实现水平方向无缝滚动
Jan 10 Javascript
javascript 中iframe高度自适应(同域)实例详解
May 16 Javascript
详细介绍RxJS在Angular中的应用
Sep 23 Javascript
实例讲解javascript实现异步图片上传方法
Dec 05 Javascript
微信小程序日期时间选择器使用方法
Feb 01 Javascript
JS中的事件委托实例浅析
Mar 22 Javascript
jQuery实现评论模块
Aug 19 jQuery
Ajax实现页面无刷新留言效果
Mar 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
大师制作的中短波矿石收音机
2020/04/02 无线电
Oracle 常见问题解答
2006/10/09 PHP
PHP的几个常用数字判断函数代码
2012/04/24 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
javascript动画浅析
2012/08/30 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
浅谈js在html中的加载执行顺序,多个jquery ready执行顺序
2016/11/26 Javascript
jQuery Pagination分页插件使用方法详解
2017/02/28 Javascript
详解webpack 多页面/入口支持&公共组件单独打包
2017/06/29 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
2018/11/28 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
vue+mock.js实现前后端分离
2019/07/24 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
python每隔N秒运行指定函数的方法
2015/03/16 Python
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
python实现RSA加密(解密)算法
2016/02/17 Python
Python基本语法经典教程
2016/03/11 Python
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
Python生成密码库功能示例
2017/05/23 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
python实现简单成绩录入系统
2019/09/19 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
Python换行与不换行的输出实例
2020/02/19 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
计划生育个人总结
2015/03/02 职场文书