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调试logger组件实现代码
Nov 20 Javascript
用JQuery模仿淘宝的图片放大镜显示效果
Sep 15 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
Oct 11 Javascript
js通过元素class名字获取元素集合的具体实现
Jan 06 Javascript
jQuery判断checkbox是否选中的3种方法
Aug 12 Javascript
js实现点击左右按钮轮播图片效果实例
Jan 29 Javascript
浅谈json取值(对象和数组)
Jun 24 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
May 07 Javascript
关于TypeScript中import JSON的正确姿势详解
Jul 25 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
Dec 04 Javascript
详解vue组件中使用路由方法
Feb 12 Javascript
ES6对象操作实例详解
May 23 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
Win下如何安装PHP的APC拓展
2013/08/07 PHP
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
详解基于angular路由的requireJs按需加载js
2017/01/20 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
vue-axios使用详解
2017/05/10 Javascript
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
python函数形参用法实例分析
2015/08/04 Python
Python二分查找详解
2015/09/13 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
使用Python更换外网IP的方法
2018/07/09 Python
python3的输入方式及多组输入方法
2018/10/17 Python
Python xlwt模块使用代码实例
2020/06/10 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
2020/11/17 Python
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
Linux文件操作命令都有哪些
2016/07/23 面试题
灵泰克Java笔试题
2016/01/09 面试题
工作中的自我评价如何写好
2013/10/28 职场文书
教师自我鉴定
2013/12/13 职场文书
实验教师岗位职责
2014/02/13 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
Python+Tkinter打造签名设计工具
2022/04/01 Python
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js