JavaScript的循环遍历
一、数据类型的引用赋值操作:
1、简单数据类型/基本数据类型:
1 // 此时 str1 中存储的是数据 2 var str1 = '北京'; 3 // 将 str1 中存储的数据北京赋值给str2 4 var str2 = str1; 5 // 之后对str1 的操作,与str2,无关 6 var str1 = '上海'; 7 console.log(str1, str2)
2、引用数据类型/复杂数据类型:
1 // arr1 变量中存储的是数组的内存地址 2 var arr1 = [1,2,3,4,5,6]; 3 //将arr1 存储的内存地址,赋值给arr2,两个变量存储的是相同的内存地址 4 var arr2 = arr1; 5 //当arr1操作,数组arr2也会变化 6 arr1[0] = '北京'; 7 console.log(arr2);
二、深拷贝与浅拷贝:
1、浅拷贝定义:
①、直接赋值,赋值的是内存地址
②、赋值之后,两个变量使用的相同内容
③、一个操作,另一个也会改变。
2、深拷贝定义:
①、使用循环遍历,获取引用数据类型中,存储的每一个数据信息,赋值到新的变量中
②、赋值之后,两个变量,没有任何关系
三、循环遍历:
1、方法一:for循环
1 var arr3 = ['北京','上海','广州','重庆','天津']; 2 // 获取arr3中的所有数据数值,赋值到新的数组中 3 var arr4 = []; 4 //通过循环,生成arr3的所有索引下标 5 for(var i = 0; i <= arr3.length-1;i++ ){ 6 //arr3[i]就是获取arr3中的存储数据信息 7 //arr4.push()将arr3中的数据arr3[i],写入到arr4中 8 arr4.push(arr3[i]); 9 } 10 console.log(arr4); 11 //修改arr3中的数据,观察arr3与arr4之间的变化 12 arr3[0] = '武汉'; 13 console.log(arr3,arr4);
2、方法二:forEach() 方法
语法规则:
数组变量.forEach(function(形参1,形参2,形参3){
程序内容;
})
注:
形参1:存储的是当前循环次数时,获取的单元数据
参数2:存储的是当前循环次数时,获取的单元索引下标
参数3:存储的是原始数组
三个形参,不一定都要定义,可以根据实际需求,形参可以任意定义,只要符合命名规范就可以,forEach() 只能循环遍历数组,不能循环遍历对象
1 var arr = ['北京','上海','广州','重庆','天津']; 2 /* 3 第一次循环,循环对象是 第一个单元 4 val : 存储数据 '北京' key : 存储索引 0 arr : 存储原始数组 5 第二次循环,循环对象是 第二个单元 6 val : 存储数据 '上海' key : 存储索引 1 arr : 存储原始数组 7 第三次循环,循环对象是 第三个单元 8 val : 存储数据 '广州' key : 存储索引 2 arr : 存储原始数组 9 第四次循环,循环对象是 第四个单元 10 val : 存储数据 '重庆' key : 存储索引 3 arr : 存储原始数组 11 第五次循环,循环对象是 第五个单元 12 val : 存储数据 '天津' key : 存储索引 4 arr : 存储原始数组 13 */ 14 arr.forEach(function(val,key,arr){ 15 console.log(val,key,arr); 16 }) 17 18 3、方法三:for...in方法 19 语法规则: 20 for(var 自定义变量 in 数组){ 21 程序内容; 22 }
3、方法三:for...in方法
语法规则:
for(var 自定义变量 in 数组){
程序内容;
}
注:
自定义变量:存储数组单元索引
存储的索引的数据类型是字符串类型。如果要执行加法运算,需要转化为数值类型
for...in 是数组,对象都可以使用的循环。
for...in 循环只能获取索引,别的不能获取
1 var arr = ['北京','上海','广州','重庆','天津']; 2 3 for(var key in arr){ // 自定义变量,存储索引 0 1 2 3 4 .... 4 console.log(key,arr[key]); // arr[key] 就是索引对应的数据 5 }
总结:
for循环 forEach()循环 for...in循环
针对数组而言,都可以完成我们的需求
只是针对不同的情况
推荐使用 forEach() ,最简单最方便
for循环的优点是,可以控制循环的起始和结束
for...in一般是针对对象的循环