别了 JavaScript中的isXX系列


Posted in Javascript onAugust 01, 2012
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 相关文章推荐
IE下js调试工具Companion.JS
Oct 15 Javascript
浅析Prototype的模板类 Template
Dec 07 Javascript
用js实现输入提示(自动完成)的实例代码
Jun 14 Javascript
JavaScript的21条基本知识点
Mar 04 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
May 27 Javascript
JavaScript必知必会(十) call apply bind的用法说明
Jun 08 Javascript
AngularJS 2.0入门权威指南
Oct 08 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
Oct 27 Javascript
Angular.JS中的指令引用template与指令当做属性详解
Mar 30 Javascript
vue发送ajax请求详解
Oct 09 Javascript
小程序如何定位所在城市及发起周边搜索
Feb 11 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
Oct 27 Javascript
JS判断元素为数字的奇异写法分享
Aug 01 #Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
Aug 01 #Javascript
jQuery源码中的chunker 正则过滤符分析
Jul 31 #Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
Jul 31 #Javascript
基于jquery的点击链接插入链接内容的代码
Jul 31 #Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
Jul 31 #Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
Jul 31 #Javascript
You might like
配置PHP使之能同时支持GIF和JPEG
2006/10/09 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
php读取本地json文件的实例
2018/03/07 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
Bootstrap Table从零开始
2017/06/30 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
JavaScript console的使用方法实例分析
2020/04/28 Javascript
Django学习之文件上传与下载
2019/10/06 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
如何使用Pytorch搭建模型
2020/10/26 Python
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
网络教育毕业生自我鉴定
2013/10/10 职场文书
大学生最新职业生涯规划书范文
2014/01/12 职场文书
2014中学教师节广播稿
2014/09/10 职场文书
工程资料员岗位职责
2015/04/13 职场文书
现实表现证明材料
2015/06/19 职场文书
大队委员竞选稿
2015/11/20 职场文书
门面租赁合同范文
2019/08/06 职场文书