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 相关文章推荐
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
May 06 Javascript
javascript中JSON对象与JSON字符串相互转换实例
Jul 11 Javascript
javascript性能优化之事件委托实例详解
Dec 12 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
May 30 Javascript
AngularJS 指令详细介绍
Jul 27 Javascript
简单理解js的prototype属性及使用
Dec 07 Javascript
BootStrap Table 获取同行不同列元素的方法
Dec 19 Javascript
详解plotly.js 绘图库入门使用教程
Feb 23 Javascript
webpack+react+antd脚手架优化的方法
Apr 02 Javascript
vue组件从开发到发布的实现步骤
Nov 11 Javascript
layui动态表头的实现代码
Aug 22 Javascript
ElementUI中el-tree节点的操作的实现
Feb 27 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
PHPLog php 程序调试追踪工具
2009/09/09 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
2015/09/28 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
php ajax confirm 删除实例详解
2019/03/06 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
浅谈Node.js中的定时器
2015/06/18 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
python实现批量下载新浪博客的方法
2015/06/15 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
python实现图片插入文字
2019/11/26 Python
PyCharm最新激活码(2020/10/27全网最新)
2020/10/27 Python
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
农药学硕士毕业生自荐信
2013/09/25 职场文书
给分销商的致歉信
2014/01/14 职场文书
四年级数学教学反思
2014/02/02 职场文书
奥利奥广告词
2014/03/20 职场文书
党员个人总结自评
2015/02/14 职场文书
签证工作证明模板
2015/06/15 职场文书
2016年党员创先争优公开承诺书
2016/03/25 职场文书
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
使用CSS自定义属性实现骨架屏效果
2022/06/21 HTML / CSS
设置IIS Express并发数
2022/07/07 Servers