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 版
Mar 24 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
Feb 07 Javascript
JS 添加网页桌面快捷方式的代码详细整理
Dec 27 Javascript
js open() 与showModalDialog()方法使用介绍
Sep 10 Javascript
node.js中的console.warn方法使用说明
Dec 09 Javascript
js自定义弹框插件的封装
Aug 24 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
Sep 10 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
Feb 10 Javascript
JS求Number类型数组中最大元素方法
Apr 08 Javascript
vue项目中引入Sass实例方法
Aug 27 Javascript
浅析JavaScript 函数柯里化
Sep 08 Javascript
Js实现粘贴上传图片的原理及示例
Dec 09 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的宝库目录--PEAR
2006/10/09 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
ThinkPHP表单数据智能写入create方法实例分析
2015/09/27 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
谷歌地图打不开的解决办法
2014/08/07 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
2017/03/04 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
node.js基于express使用websocket的方法
2017/11/09 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
python用plt画图时,cmp设置方法
2018/12/13 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
我就是这样学习Python中的列表
2019/06/02 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
2019/09/10 Python
PyCharm更改字体和界面样式的方法步骤
2019/09/27 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
Django nginx配置实现过程详解
2020/09/10 Python
python中pdb模块实例用法
2021/01/15 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
大学生军训自我评价分享
2013/11/09 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书
python实现黄金分割法的示例代码
2021/04/28 Python
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python