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 相关文章推荐
用脚本调用样式的几种方法
Dec 09 Javascript
JS加ASP二级域名转向的代码
May 17 Javascript
js获取网页高度(详细整理)
Dec 28 Javascript
js跑马灯代码(自写)
Apr 17 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
Feb 12 Javascript
node.js中的fs.exists方法使用说明
Dec 17 Javascript
理解javascript对象继承
Apr 17 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
Jun 12 Javascript
JavaScript中获取时间的函数集
Aug 16 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
Nov 07 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
Nov 01 Javascript
实用的 vue tags 创建缓存导航的过程实现
Dec 03 Vue.js
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
PHP 命名空间实例说明
2011/01/27 PHP
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
php跨站攻击实例分析
2014/10/28 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
2017年最好用的9个php开发工具推荐(超好用)
2017/10/23 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
2018/08/06 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
2019/10/10 PHP
不错的JS中变量相关的细节分析
2007/08/13 Javascript
javascript StringBuilder类实现
2008/12/22 Javascript
javascript操作数组详解
2014/12/17 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
如何实现移动端浏览器不显示 pc 端的广告
2015/10/15 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
javascript合并两个数组最简单的实现方法
2019/09/14 Javascript
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
基于Python解密仿射密码
2019/10/21 Python
Python面向对象编程基础实例分析
2020/01/17 Python
Python @property原理解析和用法实例
2020/02/11 Python
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
世界各地的当地人的食物体验:Eatwith
2019/07/26 全球购物
教师自我评价范例
2013/09/24 职场文书
玲玲的画教学反思
2014/02/04 职场文书
环保项目建议书
2014/08/26 职场文书
法人代表授权委托书范文
2014/09/10 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
2015年禁毒宣传活动总结
2015/03/25 职场文书
工作自我评价范文
2019/03/21 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书