JavaScript中的isXX系列是否继续使用的分析


Posted in Javascript onApril 16, 2011
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 相关文章推荐
dwr spring的集成实现代码
Mar 22 Javascript
XmlUtils JS操作XML工具类
Oct 01 Javascript
extjs表格文本启用选择复制功能具体实现
Oct 11 Javascript
jquery ztree实现下拉树形框使用到了json数据
May 14 Javascript
jquery操作HTML5 的data-*的用法实例分享
Aug 17 Javascript
常用的JavaScript WEB操作方法分享
Feb 28 Javascript
JS制作简单的三级联动
Mar 18 Javascript
JQuery学习总结【一】
Dec 01 Javascript
jQuery Masonry瀑布流插件使用方法详解
Jan 18 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
Nov 24 Javascript
javascript完美实现给定日期返回上月日期的方法
Jun 15 Javascript
js闭包的9个使用场景
Dec 29 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
Apr 16 #Javascript
表单JS弹出填写提示效果代码
Apr 16 #Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
Apr 16 #Javascript
分享10篇优秀的jQuery幻灯片制作教程及应用案例
Apr 16 #Javascript
javascript 弹出窗口中是否显示地址栏的实现代码
Apr 14 #Javascript
js网页侧边随页面滚动广告效果实现
Apr 14 #Javascript
jquery下jstree简单应用 - v1.0
Apr 14 #Javascript
You might like
全国FM电台频率大全 - 4 山西省
2020/03/11 无线电
用来解析.htgroup文件的PHP类
2012/09/05 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
优化网页之快速的呈现我们的网页
2007/06/29 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
js判断两个日期是否相等的方法
2013/09/10 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
JS打印组合功能
2016/08/04 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
2017/01/15 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
jquery实现楼层滚动效果
2018/01/01 jQuery
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
JS动态图片的实现方法完整示例
2020/01/13 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
使用Python下载Bing图片(代码)
2013/11/07 Python
Python实现的多线程端口扫描工具分享
2015/01/21 Python
python 异常处理总结
2016/10/18 Python
Python字符串格式化的方法(两种)
2017/09/19 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
python实现翻译word表格小程序
2020/02/27 Python
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
shell程序如何生命变量?shell变量是弱变量吗?
2014/11/10 面试题
制药工程专业应届生求职信
2013/09/24 职场文书
美食节目策划方案
2014/05/31 职场文书
小学运动会口号
2014/06/07 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
python批量更改目录名/文件名的方法
2021/04/18 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python