1.for 循环
原生JS最基本的使用:html
for (var i=0;i<cars.length;i++) { ..... }
for - 循环代码块必定的次数
2.for in
for/in - 循环遍历对象的属性
以任意顺序遍历一个对象的可枚举属性。对于每一个不一样的属性,语句都会被执行jquery
var obj = {a:1, b:2, c:3}; for (var prop in obj) { console.log("obj." + prop + " = " + obj[prop]); // for (variable in object) {...} // variable // 在每次迭代时,将不一样的属性名分配给变量。 // object // 被迭代其枚举属性的对象。
for…in 不该该被用来迭代一个下标顺序很重要的 Array .数组
let array2 = ['a','b','c'] let obj1 = { name : 'lei', age : '16' } for(variable in array2){ //variable 为 index console.log(variable ) //0 1 2 } for(variable in obj1){ //variable 为属性名 console.log(variable) //name age }
3.forEach()和map()
JavaScript 提供了 foreach() map() 两个可遍历 Array对象 的方法 forEach和map用法相似,均可以遍历到数组的每一个元素,并且参数一致;
forEach() 方法对数组的每一个元素执行一次提供的函数。数据结构
let a = ['a', 'b', 'c']; a.forEach(function(element) { console.log(element); });
array.forEach(callback(currentValue, index, array){ //do something }, this) array.forEach(callback[, thisArg])
参数:app
callback为数组中每一个元素执行的函数,该函数接收三个参数:dom
currentValue(当前值)
数组中正在处理的当前元素。
index(索引)
数组中正在处理的当前元素的索引。
array
forEach()方法正在操做的数组。
thisArg可选可选参数。当执行回调 函数时用做this的值(参考对象)。
forEach 遍历的范围在第一次调用 callback 前就会肯定。调用forEach 后添加到数组中的项不会被 callback 访问到函数
二者的不一样点:
不一样点:this
forEach() 方法对数组的每一个元素执行一次提供的函数。老是返回undefined;spa
map() 方法建立一个新数组,其结果是该数组中的每一个元素都调用一个提供的函数后返回的结果。返回值是一个新的数组;.net
var array1 = [1,2,3,4,5]; var x = array1.forEach(function(value,index){ console.log(value); //可遍历到全部数组元素 return value + 10 }); console.log(x); //undefined 不管怎样,总返回undefined var y = array1.map(function(value,index){ console.log(value); //可遍历到全部数组元素 return value + 10 }); console.log(y); //[11, 12, 13, 14, 15] 返回一个新的数组
4.for…of
ECMAScript 6新方法
for…of 语句建立一个循环来迭代可迭代的对象。在 ES6 中引入的 for…of 循环,以替代 for…in 和 forEach() ,并支持新的迭代协议。for…of 容许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构等 for…of 循环仅适用于迭代。 而普通对象不可迭代
let array2 = ['a','b','c'] let obj1 = { name : 'lei', age : '16' } for(variable of array2){ /variable 为 value console.log(variable ) //'a','b','c' } for(variable of obj1){ //<strong>普通对象不能这样用</strong> console.log(variable) // 报错 : main.js:11Uncaught TypeError: obj1[Symbol.iterator] is not a function
总结 :
:for in老是获得对像的key或数组,字符串的下标,而for of和forEach同样,是直接获得值
结果for of不能对象用
对于新出来的Map,Set上面
for…in循环会遍历一个object全部的可枚举属性。
for…of会遍历具备iterator接口的数据结构
若是是数组循环:
原始的for循环比较麻烦,forEach,这种写法的问题在于,没法中途跳出forEach循环,break命令或return命令都不能奏效。
for…in数组循环有几个缺点:
数组的键名是数字,可是for…in循环是以字符串做为键名“0”、“1”、“2”等等。
for…in循环不只遍历数字键名,还会遍历手动添加的其余键,甚至包括原型链上的键。
某些状况下,for…in循环会以任意顺序遍历键名。
总之,for…in循环主要是为遍历对象而设计的,不适用于遍历数组
for…of循环相比上面几种作法,有一些显著的优势:
有着同for…in同样的简洁语法,可是没有for…in那些缺点。
不一样于forEach方法,它能够与break、continue和return配合使用。
提供了遍历全部数据结构的统一操做接口。
若是是循环对象,用for in
jquery 循环的用法
jQuery的each方法的几种经常使用的用法
var arr = [ "one", "two", "three", "four"]; $.each(arr, function(){ alert(this); });
//上面这个each输出的结果分别为:one,two,three,four
var arr1 = [[1, 4, 3], [4, 6, 6], [7, 20, 9]] $.each(arr1, function(i, item){ alert(item[0]); });
//其实arr1为一个二维数组,item至关于取每个一维数组,
//item[0]相对于取每个一维数组里的第一个值
//因此上面这个each输出分别为:1 4 7
var obj = { one:1, two:2, three:3, four:4}; $.each(obj, function(key, val) { alert(obj[key]); });
//这个each就有更厉害了,能循环每个属性
//输出结果为:1 2 3 4
jQuery更适用的遍历方法
1)先获取某个集合对象
2)遍历集合对象的每个元素
var d=$(“div”);
$.each(d,function (index,domEle){
d是要遍历的集合
index就是索引值
domEle 表示获取遍历每个dom对
});
$(function(){ var con=[ { "image1":"img/1524880084962.jpg", "shopName":"黑花生(100g*15袋/盒)", "price":190, "markPrice":200 }, { "image1":"img/1524879960117.jpg", "shopName":"黑花生(100g*15袋/盒)", "price":190, "markPrice":200 }, { "image1":"img/1524879605807.jpg", "shopName":"黑花生(100g*15袋/盒)", "price":190, "markPrice":200 }, { "image1":"img/1524879181488.jpg", "shopName":"黑花生(100g*15袋/盒)", "price":190, "markPrice":200 } ] var html=""; $.each(con, function(k,v) {//这里的函数参数是键值对的形式,k表明键名,v表明值 html+='<li class="shopBox">'+ '<div class="shopImg"><img src='+con[k].image1+'/></div>'+ '<div class="shopListName">'+con[k].shopName+'</div>'+ '<div class="shopPrice">'+ '<span class="price">¥'+con[k].price+'</span>'+ '<span class="marketPrice">¥'+con[k].markPrice+'</span>'+ '</div>'+ '</li>' }); $(".shop_box").append(html); })
注意若是是后台返回的是Json字符串请必定要转换一下:
//data是后台传过来的字符串 $.each(JSON.parse(data), function (index, obj) { //使用JSON.parse转换为JavaScript对象。 要不控制台报错 index是下标 obj是内容 若是是对象的话就 obj.(名称就能够) alert(index); });
若是不使用JSON.parse()来转换 会报 Uncaught TypeError: Cannot use 'in' operator to search for '156' 错误
———————————————— 版权声明:本文为CSDN博主「_dalianmiao」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处连接及本声明。原文连接:https://blog.csdn.net/hani_wen/article/details/81878112