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+xml自动生成表格的东西
Dec 21 Javascript
浅谈javascript的原型继承
Jul 25 Javascript
jQuery阻止同类型事件小结
Apr 19 Javascript
javascript的创建多行字符串的7种方法
Apr 29 Javascript
JS获取当前网页大小以及屏幕分辨率等
Sep 05 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
Feb 06 Javascript
原生JavaScript制作微博发布面板效果
Mar 11 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
Mar 09 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
Apr 12 Javascript
JS将网址url转化为JSON格式的方法
Jul 02 Javascript
Electron-vue开发的客户端支付收款工具的实现
May 24 Javascript
JavaScript 空间坐标的使用
Aug 19 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
解析如何在PHP下载文件名中解决乱码的问题
2013/06/20 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
jQuery中prev()方法用法实例
2015/01/08 Javascript
图解Sublime Text3使用技巧
2015/12/21 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
vue 解决数组赋值无法渲染在页面的问题
2019/10/28 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
python使用多线程不断刷新网页的方法
2015/03/31 Python
python链接Oracle数据库的方法
2015/06/28 Python
深入理解python多进程编程
2016/06/12 Python
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
python kmeans聚类简单介绍和实现代码
2018/02/23 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
在Python中实现替换字符串中的子串的示例
2018/10/31 Python
Python数据集切分实例
2018/12/08 Python
Python 项目转化为so文件实例
2019/12/23 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
python读取当前目录下的CSV文件数据
2020/03/11 Python
python的Jenkins接口调用方式
2020/05/12 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
Python pip安装第三方库实现过程解析
2020/07/09 Python
实习单位接收函
2014/01/11 职场文书
捐赠仪式主持词
2014/03/19 职场文书
乔布斯斯坦福大学演讲稿
2014/05/23 职场文书
大学生青年志愿者活动总结
2015/05/06 职场文书
诉讼和解协议书
2016/03/23 职场文书
Nginx配置Https安全认证的实现
2021/05/26 Servers
Python学习之os包使用教程详解
2022/03/21 Python