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 相关文章推荐
js 日期转换成中文格式的函数
Jul 07 Javascript
Prototype Hash对象 学习
Jul 19 Javascript
js getBoundingClientRect() 来获取页面元素的位置
Nov 25 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
Mar 20 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
Jan 08 Javascript
jQuery遍历Table应用示例
Apr 09 Javascript
详解JavaScript的Date对象(制作简易钟表)
Apr 07 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
Jan 21 Javascript
最常见和最有用的字符串相关的方法详解
Feb 06 Javascript
canvas仿iwatch时钟效果
Mar 06 Javascript
JS实现的按钮点击颜色切换功能示例
Oct 19 Javascript
jQuery实现的图片点击放大缩小功能案例
Jan 02 jQuery
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 读取文件内容代码(txt,js等)
2009/12/06 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
php生成验证码函数
2015/10/20 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
键盘控制事件应用教程大全
2006/11/24 Javascript
jQuery的学习步骤
2011/02/23 Javascript
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
动态创建按钮的JavaScript代码
2016/01/29 Javascript
JavaScript中的继承之类继承
2016/05/01 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
详谈Node.js之操作文件系统
2017/08/29 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
[00:34]拔城逐梦,热血永恒!2020(秋)完美世界城市挑战赛报名开启
2020/10/09 DOTA
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
Python restful框架接口开发实现
2020/04/13 Python
详解Python高阶函数
2020/08/15 Python
image-set实现Retina屏幕下图片显示详细介绍
2012/12/24 HTML / CSS
英国家庭和商业健身器材购物网站:Fitness Options
2018/07/05 全球购物
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
生产部主管岗位职责
2014/01/06 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
七一慰问简报
2015/07/20 职场文书
如何理解python接口自动化之logging日志模块
2021/06/15 Python