var arr=[];
var obj=new Object() ;
var a=[1,2,3,4],b=[1,2,3,4];
 for(var i=0;i<4;i++){
               obj.name=a[i];obj.value=b[i];
               arr.push(obj)
}; console.log(arr);[/b][/size]0: {name: 4, value: 4}1: {name: 4, value: 4}2: {name: 4, value: 4}3: {name: 4, value: 4}var arr=[];
var a=[1,2,3,4],b=[1,2,3,4]; 
for(var i=0;i<4;i++){
            var obj= new Object();
               obj.name=a[i];obj.value=b[i];
               arr.push(obj)
}; console.log(arr)
0: {name: 1, value: 1}1: {name: 2, value: 2}2: {name: 3, value: 3}3: {name: 4, value: 4}
为什么obj定义的位置不同,结果会不同

解决方案 »

  1.   

    第一个obj是在for循环的外部定义的,每次循环放入的对象是同一个对象,因此最后的值被4覆盖。第二个obj是在for循环中定义,每次给对象的属性赋值时都不是同一个对象。
      

  2.   

    定义在外面,每次执行时,上一个数据会被下一个数据覆盖,如果想和下面的方式达到一样的效果,只需要再循环里面加一句话 obj={} 每次进入循环前清空obj中的数据