javascript笔记——源生js实现each方法

出处:http://www.lovejavascript.com/#!zone/blog/content.html?id=48

jquery里面有个each方法,将循环操作简化、便捷。

随后es出了个forEach方法,两个虽然用法相近,但是不能处理对象类型。且无法通过return true达到continue效果。

此外还有个every方法,该方法虽然可以实现continue效果,但是在处理类数组与对象类型时,完全无用。

在不使用jquery的each方法时,该如何处理;或者说用原生如何来实现?我在GridManager.js中集成了该方法,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 通过字面量方式实现的函数each
var each =  function(object, callback){
  var type = (function(){
          switch (object.constructor){
            case Object:
                return 'Object';
                break;
            case Array:
                return 'Array';
                break;
            case NodeList:
                return 'NodeList';
                break;
            default:
                return 'null';
                break;
        }
    })();
    // 为数组或类数组时, 返回: index, value
    if(type === 'Array' || type === 'NodeList'){
        // 由于存在类数组NodeList, 所以不能直接调用every方法
        [].every.call(object, function(v, i){
            return callback.call(v, i, v) === false false true;
        });
    }
    // 为对象格式时,返回:key, value
    else if(type === 'Object'){
        for(var in object){
            if(callback.call(object[i], i, object[i]) === false){
                break;
            }
        }
    }
}

我们来try一下, 测试下数组、对象、类数组类型及中断效果

数组类型:

1
2
3
4
var _array = [1,2,3,4];
each(_array, function(i, v){
  console.log(i + ': ' + v);
});

输出如下:

对象类型:

1
2
3
4
var object = {a:1, b:2, c:3}
each(object, function(i, v){
  console.log(i + ': ' + v);
});

输出如下:

类数组类型 :

1
2
3
4
var ele = document.querySelectorAll('div');
each(ele, function(i, v){
  console.log(i + ': ' + v);
});

输出如下:

增加中断条件:

1
2
3
4
5
6
7
8
9
10
11
12
var object2 = {name:'baukh', age: '29', six:'男', url: 'www.lovejavascript.com',}
each(object2, function(i, v){
  if(i === 'age'){ //如果存在键值为age的属性时,则输出警告,用于实现continue效果
    console.log('存在键值为age,这家伙已经'+v+'岁了');
    return true;
  }
  if(i === 'six' && v === '男'){//如果存在键值为age的属性时,则输出跳出,用于实现break效果
    console.log('存在键值为six,是个男的,不用关注了~');
    return false;
  }
  console.log(i + ': ' + v);
});

输出如下:

从结果可以看出来,each方法已经实现了jquery的each功能。且实现如此简单~

cocos2d JS 源生js实现each方法相关推荐

  1. 源生的html属性js,源生JS怎样实现todolist功能

    这次给大家带来源生JS怎样实现todolist功能,源生JS实现todolist功能的注意事项有哪些,下面就是实战案例,一起来看一下. 该项目主要可以练习js操控dom,事件,事件触发之间的逻辑关系, ...

  2. 源生ajax同步异步请求,源生JS怎样实现文件异步上传

    这次给大家带来源生JS怎样实现文件异步上传,源生JS实现文件异步上传的注意事项有哪些,下面就是实战案例,一起来看一下. 名称 文件 确定 function ajaxUploadFile() { var ...

  3. 前端 纯源生js 数字流(全代码)

    纯源生js代码 书写数字流 <!DOCTYPE html> <html lang="zh"><head><meta charset=&qu ...

  4. php 随机数 抽奖 页面,源生JS做出抽奖页面

    这次给大家带来源生JS做出抽奖页面,源生JS做出抽奖页面的注意事项有哪些,下面就是实战案例,一起来看一下. 效果图: 图片素材 : 代码如下,复制即可使用: 幸运抽奖页面 /*CSS代码*/ *{ p ...

  5. iOS与JS交互的4种方法

    iOS与JS交互的方法: 1.拦截url(适用于UIWebView和WKWebView) 2.JavaScriptCore(只适用于UIWebView,iOS7+) 3.WKScriptMessage ...

  6. c js html页面进度条,js实现进度条的方法

    本文实例讲述了js实现进度条的方法.分享给大家供大家参考.具体实现方法如下: 1.setTimeout和clearTimeout 进度条 .container{ width:450px; border ...

  7. js中match、replace方法中使用正则表达式

    为什么80%的码农都做不了架构师?>>>    js中match.replace方法中使用正则表达式 (2012-06-29 14:23:37) 转载▼ 标签: 字符串 飞雪 正则表 ...

  8. [转]Asp.net 将js文件打包进dll 方法

    Asp.net 将js文件打包进dll 方法 注:本文基于.NET 2.0 和 VS2005 我们在编写 Server Control 的时候难免要用到一些客户端脚本(javascript),如何把脚 ...

  9. .NET 调用JS:WebBrowser.Document.InvokeScript 方法抛出“指定的转换无效”异常的原因

    .NET 调用JS:WebBrowser.Document.InvokeScript 方法抛出"指定的转换无效"异常的原因 参考文章: (1).NET 调用JS:WebBrowse ...

最新文章

  1. 美多商城之商品(商品数据库表设计)
  2. 如何降低QPS(错峰、限流、削峰)
  3. linux gdb#039;查找寄存器地址,【Linux跟踪和调试】gdb
  4. 史上最NB程序员的自白
  5. fedora 22 安装 flash player
  6. 固定 顶部_抗拉固定球铰支座优点与施工步骤
  7. 34. Differentiate between inheritance of interface and inheritance ofimplementations
  8. java开发steam平台_stma(steam平台)
  9. 【Appdata】appdata文件夹太大,移动到D盘。
  10. pwn基础之ctfwiki-栈溢出-基本ROP-ret2text
  11. luci网页shell_LUCI 使用其原有机制的建立新的页面
  12. OV7725摄像头显示VGA/LCD
  13. Java接口的定义、使用及成员特点
  14. 如何在Oracle数据库中使用dbms_output输出内容
  15. 中国卸油系统行业市场供需与战略研究报告
  16. 程序卡住了?教你如何调试已在运行的程序
  17. [Copy] Netlink Socket
  18. 修改office正版验证(测试通过)
  19. HTML5期末大作业:关于家乡景点介绍主题——上海介绍(5页) HTML+CSS+JavaScript 大二实训HTML作业...
  20. Android开发之Audio播放:竞争Audio之Audio Focus的应用

热门文章

  1. excel自定义函数添加和使用方法
  2. django 1.8 官方文档翻译: 2-5-1 管理器
  3. Corosync与Pacemaker实现nfs作为共享存储的MySQL高可用
  4. lighttpd 之防盗链
  5. 第六次作业--结对编程第二次
  6. Selenium Firefox 官方Webdriver -- Geckodriver 下载地址
  7. Android - 返回上一个界面finish()方法
  8. linux shell中的单引号与双引号的区别(看完就不会有引号的疑问了)(转)
  9. 使用模板部署的Linux虚拟机网卡不可用的处理方法
  10. GridView自带的分页功能的实现