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,需要注意的是当你向工程中拖入这些文件时,选择拷贝到工程中,(拖入的文件夹是蓝色 ...
随机推荐
- python中的目录递归的创建和目录及其下的文件递归的删除
1,删除目录data下的train及其下的所有文件,相当于linux中的rm -rf import shutil shutil.rmtree('data/train') 2,递归的创建目录data/t ...
- ImportError: No module named 'requests.packages.urllib3'
场景:CentOS 7 运行微信告警脚本报错 原因:requests库版本问题 解决方法: sudo pip install requests urllib3 pyOpenSSL --force -- ...
- JavaScript学习历程01
水仙花数 ps:各位数字立方和等于该数本身 方法1 (数组) <script type="text/javascript"> var i = 100; var newi ...
- 一、K3 WISE 开发插件《K3 WISE常用数据表整理》
在后台数据库ICClassType表中,字段FID<0的是老单,FID>0的是新单. ----------------系统设置------------------------FStatus ...
- 编译wxWidgets
打开x64 Native Tools Command Prompt for VS 2017 cd wxWidgets-2.9.5\build\msw nmake -f makefile.vc TARG ...
- 解决Pycharm更新package出现的问题:AttributeError:module 'pip' has no attribute 'main'
很久一段时间没有更新Pycharm当中的package了,今天打开Pycharm点击package更新,发生了错误,AttributeError:module 'pip' has no attribu ...
- artTemplate的使用案列
(2) https://github.com/aui/art-template/wiki/syntax:simple
- roadhog 介绍
官方网站:https://www.npmjs.com/package/roadhog; 项目搭建demo: https://github.com/ght5935/antd-dva-less-webpa ...
- windows安装tomcat
1.打开官网http://tomcat.apache.org/ 2.在左侧的导航栏Download下方选择最新的Tomcat 9,点击页面下方的“ 64-bit Windows zip (pgp, m ...
- transform的兼容性写法浏览器 和 transition
transform:rotate(7deg); -ms-transform:rotate(7deg); /* IE 9 */ -moz-transform:rotate(7deg); /* Firef ...