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
|
// 通过字面量方式实现的函数eachvar 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 i 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功能。且实现如此简单~
javascript笔记——源生js实现each方法的更多相关文章
- cocos2d JS 源生js实现each方法
javascript笔记——源生js实现each方法 出处:http://www.lovejavascript.com/#!zone/blog/content.html?id=48 jquery里 ...
- JavaScript笔记1———js的数据类型
JS的数据类型有: 1.数值类型(Number):js中所有数字均用浮点数字表示. 可以表示32位(即4字节)的整数,也可以表示64位(即8字节)的浮点数(小数). 也可以用二进制.八进制.十进制.十 ...
- JavaScript笔记1———js的一些常识
一.什么是js? js是一种运行于解释器中的解释型脚本语言. 二.js的组成部分? 1.ECMAScript-----这是js的核心 2.DOM-----让js可以对网页进行操作(例:对页面元素的增. ...
- [Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法
js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+ ...
- javascript的setTimeout()用法总结,js的setTimeout()方法
引子 js的setTimeout方法用处比较多,通常用在页面刷新了.延迟执行了等等.但是很多javascript新手对setTimeout的用法还是不是很了解.虽然我学习和应用javascript已经 ...
- javascript笔记——js的阻塞特性[转载]
JS具有阻塞特性,当浏览器在执行js代码时,不能同时做其它事情,即<script>每次出现都会让页面等待脚本的解析和执行(不论JS是内嵌的还是外链的),JS代码执行完成后,才继续渲染页面. ...
- 【原】javascript笔记之Array方法forEach&map&filter&some&every&reduce&reduceRight
做前端有多年了,看过不少技术文章,学了新的技术,但更新迭代快的大前端,庞大的知识库,很多学过就忘记了,特别在项目紧急的条件下,哪怕心中隐隐约约有学过一个方法,但会下意识的使用旧的方法去解决,多年前ES ...
- C#中webbrowser与javascript(js)交互的方法
今天在做一个项目的时候需要用c#搞一个webbrowser,然后有些地方还需要与js交互.所以就查了一下资料,发现很多博客提到了但是却没有说下具体的操作.所以我就写一下. 开发环境是Visual St ...
- iOS JS 交互之利用系统JSContext实现 JS调用OC方法以及Objective-C调用JavaScript方法
ios js 交互分为两块: 1.oc调用js 这一块实现起来比较简单, 我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择拷贝到工程中,(拖入的文件夹是蓝色 ...
随机推荐
- window、Linux 文本文件转换
如下: $ sed -e 's/.$//' mydos.txt > myunix.txt $ sed -e 's/$/\r/' myunix.txt > mydos.txt
- Ubuntu下安装Kafka Manager
参考 : kafka管理器kafka-manager部署安装 下载Kafka Manager,并进行打包,由于Kafka manager是由scala写的,所以需要由sbt的支持 git clone ...
- tensorflow中一种融合多个模型的方法
1.使用场景 假设我们有训练好的模型A,B,C,我们希望使用A,B,C中的部分或者全部变量,合成为一个模型D,用于初始化或其他目的,就需要融合多个模型的方法 2.如何实现 我们可以先声明模型D,再创建 ...
- layui动态数据表格-分页
数据结构 $list = [ [,'], [,] ]; $json[; $json['; $json[; $json['data'] = $list; return json($json); 代码: ...
- Spring源码导入IDEA
导入Spring 4.3.8的源码,JDK的版本1.8以上:因为 1.下载Spring源码 方法一: (1)下载并安装GIt,下载地址:https://git-scm.com/download/win ...
- Lock 从来就没有成功过
package lime.thinkingInJava._021._005._003; import java.util.concurrent.ExecutorService; import java ...
- MySQL加密解密
1. 加密:mysql323,不可逆 select old_password('bbs.antian365.com'); # 10c886615b135b38 2. 加密:mysqlsha1,不可逆 ...
- BCP文件导入SQLServer数据库遇到的问题
1. BCP文件插入sql server数据库,未指定数据库字段类型情况下,需要每个字段单独指定字段长度 2.文件中的存储值得类型 3.设置最大的类型
- 给vscode添加右键打开功能
将以下文本存为vscode.reg,然后运行: Windows Registry Editor Version 5.00 ; Open files [HKEY_CLASSES_ROOT\*\shel ...
- array_rand
array_rand — 从数组中随机取出一个或多个单元 mixed array_rand ( array $array [, int $num = 1 ] ) 从数组中取出一个或多个随机的单元,并返 ...