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 相关文章推荐
xml和web特殊字符
Apr 28 Javascript
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
Jul 25 Javascript
js跟随滚动条滚动浮动代码
Dec 31 Javascript
jquery cookie的用法总结
Nov 18 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
Dec 02 Javascript
jquery获取html元素的绝对位置和相对位置的方法
Jun 20 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
Jun 30 Javascript
Javascript 6里的4个新语法
Aug 25 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
Jan 09 Javascript
vue左侧菜单,树形图递归实现代码
Aug 24 Javascript
vue打包之后生成一个配置文件修改接口的方法
Dec 09 Javascript
vue+element ui实现锚点定位
Jun 29 Vue.js
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设计模式 Command(命令模式)
2011/06/26 PHP
php绘图之加载外部图片的方法
2015/01/24 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
Yii2语言国际化自动配置详解
2018/08/22 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
响应鼠标变换表格背景或者颜色的代码
2009/03/30 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
node.js入门教程
2014/06/01 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
深入了解js原型模式
2019/05/30 Javascript
vue使用i18n实现国际化的方法详解
2019/09/05 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
Python turtle库的画笔控制说明
2020/06/28 Python
python-地图可视化组件folium的操作
2020/12/14 Python
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
Myprotein瑞士官方网站:运动营养和健身网上商店
2019/09/25 全球购物
阿联酋最好的手机、电子产品和家用电器网上商店:Eros Digital Home
2020/08/09 全球购物
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
北大青鸟学生求职信
2013/09/24 职场文书
汽车装潢店创业计划书范文
2014/02/05 职场文书
就业协议书
2014/09/12 职场文书
电影建国大业观后感
2015/06/01 职场文书
地道战观后感400字
2015/06/04 职场文书
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL
Java中的Kotlin 内部类原理
2022/06/16 Java/Android