- 浏览: 1162714 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhizhen23:
LZ 提供的链接地址失效了
重写的isPlainObject方法 -
LovingBaby:
LovingBaby 写道function fun() {}f ...
读jq之二(两种扩展) -
LovingBaby:
说的很清楚!jQuery作者为了实现简洁调用的苦心!高超的编程 ...
读jq之一(jq对象的组成) -
hard_ly:
...
将伪数组转换成数组 -
zlxzlxzlxzlxzlx:
这不能算是任意进制之间的转换,例如二十六进制、十二进制又该如何 ...
用递归实现十进制数转换N进制
我们很容易被漂亮的代码吸引,也不知不觉的在自己的代码库中加入这些。却没有冷静的想过它们的优劣。这不,我就收集了一系列形如 “是否为……?” 的判断的boolean函数。
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运算符等。
你呢?
评论
20 楼
tunpishuang
2011-05-18
请问Snandy兄,你iteye和cnblogs上面的博客 我到底应该订阅哪一个?或者说着两个博客的区别是?
19 楼
tom33
2011-04-19
智者见智,仁者见仁。如果对性能要求极端可以去掉,但多数时候是无所谓的。
18 楼
runjia1987
2011-04-19
参考jquery就OK了,封装常用的工具方法
17 楼
useryouyou
2011-04-19
EldonReturn 写道
除了isIE, isFF之类可以保留,其它都基本可以省掉
支持!
16 楼
lxs647
2011-04-18
保留意见吧、、、、
合适的场合用合适的判断语句、、、、
没有必要一竿子打死、、、
合适的场合用合适的判断语句、、、、
没有必要一竿子打死、、、
15 楼
satanultra
2011-04-18
这个不会成为性能瓶颈的,觉得封装起来好看易读就用,否则就不用,性能不是问题。
14 楼
clue
2011-04-18
现在大多数JS都属于UI库,最大的性能消耗不在JS运行速度,而是Dom操作及触发的重渲染(好像还分reflow与repaint?没深究过)
so... 我觉得库里面用这些判断函数造成的消耗无所谓来着,但有时判断不是一个比较就能得出的,就有必要用函数封装了。
如果是纯数据处理什么的,那倒是可以直接写判断以优化性能
so... 我觉得库里面用这些判断函数造成的消耗无所谓来着,但有时判断不是一个比较就能得出的,就有必要用函数封装了。
如果是纯数据处理什么的,那倒是可以直接写判断以优化性能
13 楼
srdrm
2011-04-18
应用层使用应该问题不大。
如果是 jQuery 这种框架和库里要判断,也许性能上就要考量了。
如果是 jQuery 这种框架和库里要判断,也许性能上就要考量了。
12 楼
lobbychmd
2011-04-18
想起了 !!a
11 楼
davepkxxx
2011-04-18
我经常把两行封装成一个方法
也会把一句抛异常的封装成一个方法
也会把一句抛异常的封装成一个方法
10 楼
muchao_119
2011-04-18
MARK一下,留着用~~
9 楼
wushipan_simple
2011-04-18
如果访问次数非常多的话就不能用这个了,会很卡,小型的网站,没多少人访问的可以为了简单这样做
8 楼
pfans
2011-04-18
JE帐号 写道
这个可以保留吧...
isPrimitive: function(b){
var a = typeof b;
return !!(b === undefined || b === null || a == 'boolean' || a == 'number' || a == 'string');
},
isPrimitive: function(b){
var a = typeof b;
return !!(b === undefined || b === null || a == 'boolean' || a == 'number' || a == 'string');
},
这个可以保留的,判断是否是JS的基本类型。楼主的意思应该是isUndefined、isNull无需保留。
7 楼
EldonReturn
2011-04-18
除了isIE, isFF之类可以保留,其它都基本可以省掉
6 楼
JE帐号
2011-04-18
这个可以保留吧...
isPrimitive: function(b){
var a = typeof b;
return !!(b === undefined || b === null || a == 'boolean' || a == 'number' || a == 'string');
},
isPrimitive: function(b){
var a = typeof b;
return !!(b === undefined || b === null || a == 'boolean' || a == 'number' || a == 'string');
},
5 楼
tiger82
2011-04-17
作为基础类库的话,最好还是去掉。
4 楼
qjtttt
2011-04-16
不完全支持,如果在性能要求不是很高的地方我还是会用isXXX,代码的可阅读性提高了许多,因为js是解释型语言所以效率和编译语言比肯定会慢一些,如果在程序中很多地方要判断类似 if(null==str && str.trim().length==0)
我倒是觉得一句 StringUtils.isBlank(str) 看起来更舒服些
我倒是觉得一句 StringUtils.isBlank(str) 看起来更舒服些
3 楼
__游乐场
2011-04-16
不太支持.单单一层函数调用的开销并没有那么可怕. 如果你已经写了
isArray: function(a){
return proto_obj.toString.call(a) === '[object Array]';
}
保持代码风格的统一也是蛮有必要的.
isArray: function(a){
return proto_obj.toString.call(a) === '[object Array]';
}
保持代码风格的统一也是蛮有必要的.
2 楼
rabbit2011
2011-04-16
我也支持这个观点!
1 楼
wmj007
2011-04-16
我也支持这种观点,这不光是在JS里面,在所有的程序编程里面,都应该考虑这个问题,不必要的封装只是让代码量增大,并没有达到程序优化的目的
发表评论
-
JavaScript获取图片的原始尺寸
2016-04-20 10:30 1591页面里的img元素,想要 ... -
JavaScript中奇葩的假值
2016-03-14 17:43 1157通常在以下语句结构中需要判断真假 if分支语句 whi ... -
世界上最短的数字判断代码
2016-03-14 16:21 1576我们知道JavaScript提供了typeof运算符,因此最 ... -
getBoundingClientRect在IE9/10里的bug
2015-01-12 08:30 1646getBoundingClientRect可以获得页面中某个 ... -
JavaScript中的直接量与初始器的区别
2014-11-08 06:09 1625很多代码优化及公司规范都会提到 写对象不应该 var ... -
JavaScript中的不可见数据类型
2014-11-02 11:08 1288JS提供了一些内置对象、函数和构造器供我们编程,如Math ... -
ES5严格模式
2014-10-08 18:20 1248严格模式(Strict mode)是由ECMA-262规范 ... -
JavaScript生成GUID的算法
2014-07-16 14:25 3012全局唯一标识符(GUID,Globally Unique ... -
JavaScript中点号“.”的多义性
2014-06-07 19:42 1654点号「.」在JavaScript中 ... -
冗余换性能-从Backbone的triggerEvents说开了去
2014-02-19 11:03 950Backbone是一个优秀的前端MVC库,它的代码质量必定 ... -
JavaScript中delete操作符不能删除的对象
2013-11-27 13:21 1303ES3 中,delete在8.6.2.5及11.4.1有介 ... -
JavaScript中instanceof对于不同的构造器可能都返回true
2013-11-19 11:13 1209我们知道 instanceof 运算符用来检查对象是否为某 ... -
JavaScript里模拟sleep
2013-10-16 07:52 1543有几种方式,但都不完美 一、不断循环,直到达到指定时间 ... -
参数有中包含空格且使用Post提交时须将空格转换成加号
2013-10-14 08:07 5204jQuery的serialize模块中有个r20正则 ... -
JavaScript中“基本类型”之争
2013-10-04 20:58 1121前端面试中常被问到的问题之一就是“JavaScript的基本 ... -
ES3和ES5关于计算顺序的问题(ES5先计算函数ES3则是参数)
2013-09-13 23:35 1310从cmc那看到的,分享给园友。以下是一个怪异的代码,谁 ... -
一道关于"/g"笔试题
2013-07-26 07:13 1052正则里“g”表示全局(global)的意思,比如当替换字符串 ... -
JavaScript原型继承的陷阱
2013-05-27 20:51 1394JavaScript默认采用原型 ... -
JavaScript中__proto__与prototype的关系
2013-05-21 10:38 1456这里讨论下对象的内 ... -
JavaScript中__proto__与prototype的关系
2013-05-21 10:01 3这里讨论下对象的内 ...
相关推荐
在这个部分,我们会详细探讨JavaScript中的“isXX”系列函数,包括它们的定义、使用场景,以及为何它们可能已经不是最佳实践。我们将重点分析`isUndefined`函数,因为它是这些函数中经常被使用的例子之一,但它的...
在深入分析JavaScript中的isXX系列函数时,首先需要了解这类函数的作用和使用场景。isXX系列函数主要是为了判断一个变量是否为特定的类型,比如是否是null、undefined、number等,并返回一个布尔值。这样的函数在...
HTTP状态码如200表示成功,4xx或5xx系列的代码则表示存在问题。以下是一个使用XMLHttpRequest的例子: ```javascript function isUrlReachable(url) { return new Promise((resolve, reject) => { const xhr = ...
JavaScript通用函数库包含了一系列的工具函数,适用于不同的场景和需求。这些函数库的整理旨在为学习和使用JavaScript的朋友们提供便利,使得编码过程中能够更加高效。以下将详细介绍每个函数的作用和使用方法: 1....
根据给定的信息,我们可以整理出一系列JavaScript函数的相关知识点。这些函数涵盖了类型转换、数值比较、日期处理、数据验证等多个方面,对于日常开发来说非常实用。 ### 1. var_to_obj —— 变量转对象 该函数...
对于布尔类型的属性,会有`isXx()`和`getXx()`的形式。 7.1.2 编写JavaBean 编写JavaBean就像编写普通的Java类,但需要遵循特定的命名约定。成员变量应为私有的(private),并提供公共的getter和setter方法。例如...
通过将非 ASCII 字符替换为两个字符(如 `xx`),然后计算替换后的字符串长度来间接获取原始字符串的实际长度。 #### 4.2 字符合法性验证 `isLegal` 该函数用于验证单个字符是否合法。合法字符包括数字、字母、...
JavaScript 中的 `RegExp` 对象提供了创建和操作正则表达式的能力。 ##### 1. 创建 RegExp 对象 - **显示构造函数**:`new RegExp("pattern", "flags")` - **隐式构造函数**:`/pattern/flags` ##### 2. RegExp ...
ZTEBW遵循一系列Web标准,包括但不限于HTML、CSS和JavaScript的基本规范。这有助于确保Web页面能在ZTEBW浏览器中正确渲染,并与其它符合标准的浏览器保持一致的表现。 ##### ZTEBW对于图片的支持 ZTEBW浏览器支持...
测试用户浏览器中是否有字体或字体列表 版本号 有两个版本可用:fontcheck.js(1.xx)和fontcheck-module.js(2.xx)。 第一个是简单的功能,易于复制和粘贴,并且是一种检查几种字体(一次检查一种)的简单方法。 ...
Axx:ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取01-99的数字) A3L:Authorware 3.x库文件 A4L:Authorware 4.x库文件 A5L:Authorware 5.x库文件 A3M,A4M:Authorware Macintosh...