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 相关文章推荐
JavaScript 精粹读书笔记(1,2)
Feb 07 Javascript
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
Jan 06 Javascript
jquery uaMatch源代码
Feb 14 Javascript
Asp.Net alert弹出提示信息的几种方法总结
Jan 29 Javascript
jquery 使用简明教程
Mar 05 Javascript
深入探密Javascript数组方法
Jan 08 Javascript
js通过iframe加载外部网页的实现代码
Apr 05 Javascript
Javascript中常用的检测方法小结
Oct 08 Javascript
JS中检测数据类型的几种方式及优缺点小结
Dec 12 Javascript
微信小程序 require机制详解及实例代码
Dec 14 Javascript
JS中的phototype详解
Feb 04 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
Jan 26 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
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
PHP写日志的实现方法
2014/11/05 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
jQuery性能优化28条建议你值得借鉴
2013/02/16 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
bootstrap table 多选框分页保留示例代码
2017/03/08 Javascript
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
JS判断两个数组或对象是否相同的方法示例
2019/02/28 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
python实现从一组颜色中找出与给定颜色最接近颜色的方法
2015/03/19 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
html5 div布局与table布局详解
2016/11/16 HTML / CSS
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
结构和类有什么异同
2012/07/16 面试题
护士辞职信模板
2014/01/20 职场文书
小学生评语集锦
2014/04/18 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
金砖之国观后感
2015/06/11 职场文书
九年级历史教学反思
2016/02/19 职场文书
django学习之ajax post传参的2种格式实例
2021/05/14 Python
浅谈pytorch中的dropout的概率p
2021/05/27 Python
java固定大小队列的几种实现方式详解
2021/07/15 Java/Android
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android
Win11如何查看显卡型号 Win11查看显卡型号的方法
2022/08/14 数码科技
TypeScript 内置高级类型编程示例
2022/09/23 Javascript