别了 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 相关文章推荐
window.open的功能全解析
Oct 10 Javascript
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
Oct 24 Javascript
JavaScript调用后台的三种方法实例
Oct 17 Javascript
jquery清空表单数据示例分享
Feb 13 Javascript
采用call方式实现js继承
May 20 Javascript
jquery判断浏览器后退时候弹出消息的方法
Aug 11 Javascript
JavaScript学习笔记之定时器
Jan 22 Javascript
项目中常用的JS方法整理
Jan 30 Javascript
详解微信小程序Page中data数据操作和函数调用
Sep 27 Javascript
vue+element导航栏高亮显示的解决方式
Nov 12 Javascript
vue proxy 的优势与使用场景实现
Jun 15 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
Nov 10 Javascript
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以post形式发送xml的方法
2014/11/04 PHP
php接口数据加密、解密、验证签名
2015/03/12 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
2016/12/07 PHP
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
innerText 使用示例
2014/01/23 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
Jquery实现$.fn.extend和$.extend函数
2016/04/14 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
2016/05/09 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
2019/06/04 jQuery
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
介绍Python中内置的itertools模块
2015/04/29 Python
简单解析Django框架中的表单验证
2015/07/17 Python
深入解析Python中的__builtins__内建对象
2016/06/21 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
Python 专题一 函数的基础知识
2017/03/16 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
python实现简单图书管理系统
2019/11/22 Python
在django中使用post方法时,需要增加csrftoken的例子
2020/03/13 Python
python如何编写win程序
2020/06/08 Python
详解python中的闭包
2020/09/07 Python
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
2020/02/27 HTML / CSS
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
美国性感女装网站:bebe
2017/03/04 全球购物
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
厂长岗位职责
2014/02/19 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
2016公司年会主持词
2015/07/01 职场文书
优秀教师主要事迹材料
2015/11/04 职场文书