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 相关文章推荐
jquery $.ajax各个事件执行顺序
Oct 15 Javascript
jquery制作弹窗提示窗口代码分享
Mar 02 Javascript
js或jquery实现页面打印可局部打印
Mar 27 Javascript
jQuery异步加载数据并添加事件示例
Aug 24 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
Nov 29 Javascript
JS面向对象编程详解
Mar 06 Javascript
详解AngularJs中$resource和restfu服务端数据交互
Sep 21 Javascript
JavaScript设置名字输入不合法的实现方法
May 23 Javascript
微信小程序中post方法与get方法的封装
Sep 26 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
Mar 23 Javascript
LayUI动态设置checkbox不显示的解决方法
Sep 02 Javascript
微信小程序 生成携带参数的二维码
Oct 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
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
PHP 实现多服务器共享 SESSION 数据
2009/08/15 PHP
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
php网页标题中文乱码的有效解决方法
2014/03/05 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
2014/11/18 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
jQuery 入门级学习笔记及源码
2010/01/22 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
JavaScript实战之菜单特效
2016/08/16 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
Python删除指定目录下过期文件的2个脚本分享
2014/04/10 Python
Python实现多线程抓取妹子图
2015/08/08 Python
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
如何用python整理附件
2018/05/13 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
python3 xpath和requests应用详解
2020/03/06 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
2020/09/23 Python
python3处理word文档实例分析
2020/12/01 Python
STRATHBERRY苏贝瑞包包官网:西班牙高级工匠手工打造
2020/11/10 全球购物
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
亚布力滑雪场导游词
2015/02/09 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
公司周年庆寄语
2019/06/21 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python