别了 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 相关文章推荐
javascript window.opener的用法分析
Apr 07 Javascript
JavaScript移除数组元素减少长度的方法
Sep 05 Javascript
js取float型小数点后两位数的方法
Jan 18 Javascript
原生JS和JQuery动态添加、删除表格行的方法
May 28 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
Jan 27 Javascript
jQuery插件简单学习实例教程
Jul 01 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
Feb 16 Javascript
基于Vue实例生命周期(全面解析)
Aug 16 Javascript
js实现加载页面就自动触发超链接的示例
Aug 31 Javascript
Vue.js devtool插件安装后无法使用的解决办法
Nov 27 Javascript
用jQuery实现抽奖程序
Apr 12 jQuery
jQuery插件simplePagination的使用方法示例
Apr 28 jQuery
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的简易冒泡法代码分享
2012/08/28 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
玩转vue的slot内容分发
2018/09/22 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
python实现周期方波信号频谱图
2018/07/21 Python
python requests爬取高德地图数据的实例
2018/11/10 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
解决django FileFIELD的编码问题
2020/03/30 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
意大利值得信赖的在线超级药房:PillolaStore
2020/02/05 全球购物
港湾网络笔试题
2014/04/19 面试题
软件测试面试题
2015/10/21 面试题
捐赠仪式主持词
2014/03/19 职场文书
小学校长汇报材料
2014/08/20 职场文书
2015年监理工作总结范文
2015/04/07 职场文书
倡议书格式及范文
2015/04/29 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
高中生物教学反思
2016/02/20 职场文书
教师师德承诺书2016
2016/03/25 职场文书
java设计模式--建造者模式详解
2021/07/21 Java/Android
利用Python实现模拟登录知乎
2022/05/25 Python