您的位置:首页 > Web前端 > JavaScript

js中for遍历数组和对象,及对象和数组之间的区别

2016-09-28 15:48 453 查看
数组和对象的区别

       1)数组表示有序数据的集合,对象表示无序数据的集合。顺序重要,用数组,否则用对象。

       2)数组的数据没有”名称”(name),对象的数据有”名称”(name)。

数组和对象的遍历

       1)数组的遍历(for循环和for in循环都可以)

            var arr=[1,2,3,4];

            for( var i=0;i<arr.length;i++){

                console.log(arr[i]);

            }

       2)对象的遍历

              var arr={name:"wangjing","age":"23"};

              for(var key in arr){

                 console.log(key+":"+arr[key]);

              }

              注:如果对象中key的值既有字符,又有数字的,则输出结果时,数字会在字符前面

              var arr={name:"wangjing","age":"23",1:"wj"};

              for(var key in arr){

                 console.log(key+":"+arr[key]);

              }

             输出结果:

                               

          3)类数组转化为数组

                前提:

                         a. key的值为数字

                         b. 有length这个属性

                实例:

                    var arr={length: 4,0:0,1:1,2:2,3:3};

                    var arr1=Array.prototype.slice.call(arr,0);

                    for(var i=0;i<arr1.length;i++){

                           console.log(arr1[i]);

                     }

                     注: Array.prototype.slice.call()可以将对象转换为数组,然后使用for进行数组的遍历

                        

           4)向函数中传递参数,当参数为普通变量时

                 var name="wang";

                 function change(n){

                     n="wangjing";

                    console.log(n);

                 }

                change(name);

                console.log(name);

                输出结果为:wang

                当传递的参数为普通变量时,函数内部通过形参改变值时,函数内部值发生变化,函数外边的实参并没有发生变化,因为在函数内部相当于创建了一个name变量的

            副本,对副本进行操作

             5)向函数中传递参数,当参数为对象或数组时

                  var arr={name:"wangjing",age:"23"};

                  function change(n){

                      n.name="520";

                  }

                  change(arr);            

                  console.log(arr.name);

                  输出结果为 :520

                  因为传递的是地址,相当于对实参进行直接修改

             6)向函数中传递参数,当参数为对象或数组时,对形参直接进行赋值操作,不会影响到实参的值

                   var arr={name:"wangjing",age:"23"};

                   function change(n){

                        n={name: "wj"};

                   }

                  change(arr);

                  console.log(arr.name);

                  输出结果: wangjing

                 
                 Javascript中,对象的传递实际是引用地址的传递,当给函数设置属性时,对象的引用首地址并没有发生改变
                 在函数内部将传入引用的地址指向一个新的栈地址时,函数调用结束可能会导致引用指向无效的地址,故Javascript规范特别规定了,在函数内修改对象的引用地址时,函数

         调用结束后引用地址不做改变。

                        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: