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 11 Javascript
a标签的href与onclick事件的区别详解
Nov 12 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
Sep 30 Javascript
JavaScript保留关键字汇总
Dec 01 Javascript
JSON遍历方式实例总结
Dec 07 Javascript
JS实现消息来时让网页标题闪动效果的方法
Apr 20 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
Sep 05 Javascript
AngularJS入门教程之Helloworld示例
Dec 25 Javascript
bootstrap-table组合表头的实现方法
Sep 07 Javascript
vue-cli3.0配置及使用注意事项详解
Sep 05 Javascript
vue多个元素的样式选择器问题
Nov 29 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
Apr 21 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一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
深入理解PHP中的global
2014/08/19 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
PHP实现的多进程控制demo示例
2019/07/22 PHP
Jquery Change与bind事件代码
2011/09/29 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
深入理解JavaScript中的传值与传引用
2013/12/09 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
js+css实现打字效果
2020/06/24 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
2018/06/28 Javascript
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 Javascript
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
微信跳一跳辅助python代码实现
2018/01/05 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
python实现超级马里奥
2020/03/18 Python
用python写爬虫简单吗
2020/07/28 Python
html5 div布局与table布局详解
2016/11/16 HTML / CSS
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
实习生自荐信范文
2013/11/13 职场文书
《乌塔》教学反思
2014/02/17 职场文书
人力资源主管职责范本
2014/03/05 职场文书
我的祖国演讲稿
2014/05/04 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
世界水日宣传活动总结
2015/02/09 职场文书
团员个人总结
2015/02/26 职场文书
职称评定个人总结
2015/03/05 职场文书
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python
详解Java实现数据结构之并查集
2021/06/23 Java/Android