循环的技巧
来源:互联网 发布:how to update mac os 编辑:程序博客网 时间:2024/06/05 15:30
- 作者:nuysoft/JS攻城师/高云 QQ:47214707 EMail:nuysoft@gmail.com
- 声明:本文为原创文章,如需转载,请注明来源并保留原文链接。
- 前记:本文收集了jQuery中出现的各种遍历技巧和场景
- // 简单的for-in(事件)
- for ( type in events ) {
- }
- // 缓存length属性,避免每次都去查找length属性,稍微提升遍历速度
- // 但是如果遍历HTMLCollection时,性能提升非常明显,因为每次访问HTMLCollection的属性,HTMLCollection都会内部匹配一次所有的节点
- for ( var j = 0, l = handlers.length; j < l; j++ ) {
- }
- // 不比较下标,直接判断元素是否为true(强制类型转换)
- var elem;
- for ( var i = 0; elems[i]; i++ ) {
- elem = elems[i];
- // ...
- }
- // 遍历动态数组(事件),不能缓存length属性,j++之前先执行j--,保证不会因为数组下标的错误导致某些数组元素遍历不到
- for ( j = 0; j < eventType.length; j++ ) {
- eventType.splice( j--, 1 );
- }
- for ( var i = 1; i < results.length; i++ ) {
- if ( results[i] === results[ i - 1 ] ) {
- results.splice( i--, 1 );
- }
- }
- // 迭代过程中尽可能减少遍历次数(事件),如果你能知道从哪里开始遍历的话,这里是pos
- for ( j = pos || 0; j < eventType.length; j++ ) {
- }
- //倒序遍历(事件),减少了几个字符:循环条件判断,合并i自减和i取值,倒序遍历会有浏览器优化,稍微提升遍历速度
- for ( var i = this.props.length, prop; i; ) {
- prop = this.props[ --i ];
- event[ prop ] = originalEvent[ prop ];
- }
- // 倒序遍历,中规中矩,倒序会有浏览器优化,稍微提升遍历速度
- for ( j = tbody.length - 1; j >= 0 ; --j ) {
- if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
- tbody[ j ].parentNode.removeChild( tbody[ j ] );
- }
- }
- //不判断下标,直接判断元素(选择器)
- for ( i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
- results.push( set[i] );
- }
- }
- for ( ; array[i]; i++ ) {
- ret.push( array[i] );
- }
- // 不判断下标,取出元素然后判断元素(选择器)
- for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
- }
- // 遍历DOM子元素
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- node.nodeIndex = ++count;
- }
- }
- // 动态遍历DOM子元素(DOM遍历),dir参数表示元素的方向属性,如parentNode、nextSibling、previousSibling、lastChild和firstChild
- for ( ; cur; cur = cur[dir] ) {
- if ( cur.nodeType === 1 && ++num === result ) {
- break;
- }
- }
- // while检查下标i
- var i = promiseMethods.length;
- while( i-- ) {
- obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
- }
- // while检查元素
- while( (type = types[ i++ ]) ) {
- }
- // while遍历动态数组(AJAX),总是获取第一个元素,检查是否与特殊值相等,如果相等就从数组头部移除,直到遇到不相等的元素或数组为空
- while( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
- }
- }
- // while遍历动态数组(异步队列),总是获取第一个元素,直到数组为空,或遇到值为undefined的元素
- while( callbacks[ 0 ] ) {
- callbacks.shift().apply( context, args );
- }
- // while反复调用RegExp.exec(AJAX),能够否反复调是exec比re.test、String.match更加强大的原因,每次调用都将lastIndex属性设置到紧接着匹配字符串的字符位置
- while( ( match = rheaders.exec( responseHeadersString ) ) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; // 将响应头以key-value的方式存在responseHeaders中
- }
}
上面这种循环有个不好的地方就是会把原型的属性和方法也给遍历出来,所以如果使用
这种方式,经常会结合obj.hasOwnProperty来进行判断。
- 循环的技巧
- for循环的小技巧
- 循环结构是程序设计的重要技巧
- mybatis循环map的一些技巧
- 防止Block的循环引用(技巧)
- Mybatis循环map的一些技巧
- 防止Block的循环引用(技巧)
- python中for循环的小技巧
- mybatis循环map的一些技巧
- mybatis循环map的一些技巧
- 1.3循环语句技巧
- java循环技巧
- jquery中的循环技巧
- (6)循环技巧
- python循环技巧
- python循环技巧
- Java技巧:Java中跳出多层循环的简单方法
- [ios开发技巧之]UIPickerView的数据循环显示
- PHP数据类型
- 如何测试CTS4.1
- 4/7 第4篇const int * pi/int * const pi的区别
- linux下第一个OpencV程序
- 5/7 第五篇:函数参数的传递
- 循环的技巧
- 6/7 第六篇 指向另一指针的指针
- 40 个实用的 Mac OS X Shell 脚本和终端命令
- MySQL中order by的实现 和 by rand() 和优化
- Iptables 指南 1.1.19(中文版)(一)
- 7/7 第7篇 函数名与函数指针
- android 退出应用
- xcode快捷键大全
- Android 中电源状态切换