1.遍历
(1)遍历数组
var arr = [5, 2, 7, , 4, 9, 6];
arr["a"] = 10;
for(var i=0;i<arr.length;i++){
console.log(i);//打印下标
console.log(arr[i]);//打印每一项下标对应的内容
console.log("索引值"+i+":"+arr[i]);//遍历数组
console.log(arr[i]===undefined)//判断第i项是不是undefined(第i项类型是undefined而不是值是undefined)
}
//数组的最大下标是数组的长度-1(i<arr.length即为i小于等于数组的最大下标)
(2)遍历对象
var obj={
a:1,
b:2,
c:3
}
console.log("a" in obj);//true
console.log("d" in obj);//false
// 判断属性名(key)在obj中是否存在
var obj={
a:1,
b:2,
c:3
}
for(var prop in obj){
console.log(prop);
}
//运行结果:
a
b
c
//上述,遍历对象并将对象的属性名赋值给prop
var obj={
a:1,
b:2,
c:3
}
for(var prop in obj){
console.log(prop);
console.log(obj[prop]);
//prop就是键,属性名
//obj[prop] 就是值,属性值
console.log(prop,obj[prop]);
}
(3)复制对象
// prop就是属性名,obj[prop]就是这个属性名对应的属性值
console.log(prop,obj[prop]);//打印属性名及属性值
//prop是变量,因此不能使用obj.prop
/* var obj={
a:1,
b:2,
c:3
}
var o={};
for(var prop in obj){
o[prop]=1;
}
console.log(o);
结果:
{a;1,b:1,c:1}
a:1
b:1
c:1
__proto__:Object */
/* var obj={
a:1,
b:2,
c:3
}
var o={};
for(var prop in obj){
o[prop]=obj[prop];
}
console.log(o);
结果:
{a;1,b:1,c:1}
a:1
b:2
c:3
__proto__:Object */
上述就完成了复制
(4)通过数组创建对象,然后复制出新对象
var arr=["d","e","f","a"];
var obj={};
for(var i=0;i<arr.length;i++){
obj[arr[i]]=parseInt(Math.random()*10);
}
console.log(obj);
var o1={};
for(var prop in obj){
o1[prop]=obj[prop];
}
console.log(o1);
2.通过for in遍历数组
/*
var arr=[5,7,8,,2,4,6];
arr["aa"]=10;
for(var i=0;i<arr.length;i++){
console.log(arr[i]);
}
console.log("__________________");
for(var num in arr){
console.log(arr[num]);
}
*/
//当使用for in遍历时,会将所有属性包括下标都会转为字符型,属性包含字符和下标(数字)
// 数组的下标,如果给的是字符,会转换成数值
// 1、for in不会遍历空元素,for会遍历空元素
// 2、for in可以遍历到数组的属性,for只能遍历数组所有下标,不能遍历属性
下述方法完成不遍历空元素
var arr=[2,4,6,,8,10];
for(var i=0;i<arr.length;i++){
if(!(i in arr))continue;
console.log(arr[i]);
}
或
for(var i=0;i<arr.length;i++){
if(i in arr)console.log(arr[i]);
}
3. 对象深复制
(1)引入
var obj={a:1,b:2,c:3};
var o={};
for(var prop in obj){
o[prop]=obj[prop];
}
obj.a=100;
console.log(o.a);
// 这样o就会把obj都复制过来
// 且改变obj中的a的属性值不会改变o的属性值
var obj={
a:1,
b:{
a:1,
b:2
}
}
var o={};
for(var prop in obj){
o[prop]=obj[prop];
}
obj.a=10;//不会改变o.a
obj.b.a=10;//会改变o.b.a
console.log(o);
// 这样只能复制解除最外层的引用关系,这种叫做浅复制
Javascript数组的遍历
最新推荐文章于 2024-04-24 00:45:00 发布