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 相关文章推荐
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
Apr 13 Javascript
javascript使用call调用微信API
Dec 15 Javascript
JavaScript 异常处理 详解
Feb 06 Javascript
Boostrap模态窗口的学习小结
Mar 28 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
Jun 12 Javascript
JS判断form内所有表单是否为空的简单实例
Sep 09 Javascript
BootStrap Tooltip插件源码解析
Dec 27 Javascript
详解Vue-基本标签和自定义控件
Mar 24 Javascript
vue axios 二次封装的示例代码
Dec 08 Javascript
JavaScript中为事件指定处理程序的五种方式分析
Jul 27 Javascript
详解微信小程序实现WebSocket心跳重连
Jul 31 Javascript
基于Vue实现平滑过渡的拖拽排序功能
Jun 12 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
递归列出所有文件和目录
2006/10/09 PHP
PHP实现文件安全下载
2006/10/09 PHP
MySQL相关说明
2007/01/15 PHP
基于PHP CURL用法的深入分析
2013/06/09 PHP
php中生成随机密码的自定义函数代码
2013/10/21 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
vue开发心得和技巧分享
2016/10/27 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
Python的UTC时间转换讲解
2019/02/26 Python
Python提取特定时间段内数据的方法实例
2019/04/01 Python
python3.4+pycharm 环境安装及使用方法
2019/06/13 Python
python django生成迁移文件的实例
2019/08/31 Python
python实现简单成绩录入系统
2019/09/19 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
scrapy-splash简单使用详解
2021/02/21 Python
CSS3中动画属性transform、transition和animation属性的区别
2016/09/25 HTML / CSS
John Varvatos官方网站:设计师男士时装
2017/02/08 全球购物
接口可以包含哪些成员
2012/09/30 面试题
机械专业应届生求职信
2013/12/12 职场文书
创业资金计划书
2014/02/06 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
就业协议书怎么填
2014/09/15 职场文书
2015年公司新年寄语
2014/12/08 职场文书
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL