JavaScript中的isXX系列是否继续使用的分析
JavaScript 使用 分析 系列 是否 继续
2023-06-13 09:14:27 时间
isNull:function(a){
returna===null;
},
isUndefined:function(a){
returna===undefined;
},
isNumber:function(a){
returntypeofa==="number";
},
isString:function(a){
returntypeofa==="string";
},
isBoolean:function(a){
returntypeofa==="boolean";
},
isPrimitive:function(b){
vara=typeofb;
return!!(b===undefined||b===null||a=="boolean"||a=="number"||a=="string");
},
isArray:function(a){
returnproto_obj.toString.call(a)==="[objectArray]";
},
isFunction:function(a){
returnproto_obj.toString.call(a)==="[objectFunction]";
},
isPlainObject:function(o){
if(!o||o===win||o===doc||o===doc.body){
returnfalse;
}
return"isPrototypeOf"ino&&proto_obj.toString.call(o)==="[objectObject]";
},
isWindow:function(o){
returno&&typeofo==="object"&&"setInterval"ino;
},
isEmptyObject:function(o){
for(varaino){
returnfalse;
}
returntrue;
}
以上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运算符等。
相关文章
- Memlab,一款分析 JavaScript 堆并查找浏览器和 Node.js 中内存泄漏的开源框架
- JavaScript 行内 | 内嵌 | 外链
- js 怎么使用正则表达式-JavaScript正则表达式常用技巧
- JavaScript promise使用
- 使用Javascript设置,获取和删除cookie详解编程语言
- JavaScript事件委托详解编程语言
- Javascript 判断浏览器版本和名称详解编程语言
- javascript:使用document.getElementById读取数据为空分析详解编程语言
- Javascript里的两种使用正则的方法
- 如何简单地用YUI做JavaScript动画
- 在Javascript类中使用setTimeout
- 保证JavaScript和Asp、Php等后端程序间传值编码统一
- JavaScript使用技巧精萃(.nethtml
- JavaScript滚轮事件使用说明
- JavaScript继承使用分析
- JavaScript使用IEEE标准进行二进制浮点运算产生莫名错误的解决方法
- JavaScript操作XML使用百度RSS作为新闻源示例
- 浅谈Javascript事件模拟
- javascript中的void运算符语法及使用介绍
- 你必须知道的Javascript知识点之"this指针"的应用
- JavaScript事件处理器中的event参数使用介绍
- 使用javascript过滤html的字符串(注释标记法)
- JavaScript中json使用自己总结
- JavaScript语言核心数据类型和变量使用介绍
- JavaScript自定义事件介绍
- JavaScript中按位“异或”运算符使用介绍
- javascript如何使用bind指定接收者
- JSP中使用JavaScript动态插入删除输入框实现代码
- javascript复制粘贴与clipboardData的使用
- JavaScript实现关键字高亮功能
- javascript使用switchcase实现动态改变超级链接文字及地址
- JavaScript中伪协议javascript:使用探讨