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一些不错的函数脚本代码
Sep 10 Javascript
Javascript数组操作函数总结
Feb 05 Javascript
JavaScript中的toDateString()方法使用详解
Jun 12 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
Nov 18 Javascript
jquery实现input框获取焦点的简单实例
Jan 26 Javascript
jQuery实现复选框的全选和反选
Feb 02 Javascript
Vue.js实战之Vuex的入门教程
Apr 01 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
Jan 13 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
Jul 13 Javascript
JavaScript引用类型Array实例分析
Jul 24 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
Jun 04 Javascript
如何利用React实现图片识别App
Feb 18 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
通过PHP CLI实现简单的数据库实时监控调度
2009/07/01 PHP
php下载excel无法打开的解决方法
2013/12/24 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
javascript indexOf函数使用说明
2008/07/03 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
基于jquery库的tab新形式使用
2012/11/16 Javascript
javascript判断office版本示例
2014/04/11 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
谈谈对vue响应式数据更新的误解
2017/08/01 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
详解微信小程序文件下载--视频和图片
2019/04/24 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
深入解析Python编程中JSON模块的使用
2015/10/15 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
遥感技术与仪器求职信
2014/02/22 职场文书
二年级班级文化建设方案
2014/05/10 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
Python制作一个随机抽奖小工具的实现
2021/07/07 Python
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL