Javascript数组的遍历

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);
        // 这样只能复制解除最外层的引用关系,这种叫做浅复制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值