如何在javascript数组元素中显示正确的值?

如何在javascript数组元素中显示正确的值?,javascript,arrays,object,Javascript,Arrays,Object,在下面的代码中,我创建了一个car对象,并通过增加计数修改了一个元素。每次我修改汽车,我都会把它推到一个叫做yada的阵列上。最后,我访问放入yada数组的第三辆车,查看计数是多少,但它报告的计数是6,而不是我预期的3 <html> <body> <script> var car = {limit:4, count:0, trigger:0}; var yada = new Array(); for(var i=0; i<6; i++) {

在下面的代码中,我创建了一个car对象,并通过增加计数修改了一个元素。每次我修改汽车,我都会把它推到一个叫做yada的阵列上。最后,我访问放入yada数组的第三辆车,查看计数是多少,但它报告的计数是6,而不是我预期的3

<html>
<body>
<script>

var car = {limit:4, count:0, trigger:0};
var yada = new Array();

for(var i=0; i<6; i++)
{
    car.count += 1;
    if(car.count >= car.limit)
    {
        car.trigger = 1;

    }
    yada.push(car);
    alert(car.count+" "+car.limit+" "+car.trigger);
};

alert(yada[2].count + " TEST ");

</script>
</body>
</html>

var car={limit:4,count:0,trigger:0};
var yada=新数组();
对于(变量i=0;i=car.limit)
{
car.trigger=1;
}
推(车);
警报(car.count+“”+car.limit+“”+car.trigger);
};
警报(yada[2]。计数+测试);

理解传递值和传递引用之间的区别很重要:

Javascript的默认值总是按值传递,但对于对象,变量的值是一个引用。因此,当您传递一个对象并更改其成员时,这些更改将保留在函数之外

您可以通过在for循环中创建一个新的汽车对象来进行调整:

<html>
<body>
<script>


var yada = new Array();

for(var i=0; i<6; i++)
{
    let car = {limit:4, count:0, trigger:0};
    car.count = i+1;
    if(car.count >= car.limit)
    {
        car.trigger = 1;

    }
    yada.push(car);
    alert(car.count+" "+car.limit+" "+car.trigger);
};

alert(yada[2].count + " TEST ");

</script>
</body>
</html>

var yada=新数组();
对于(变量i=0;i=car.limit)
{
car.trigger=1;
}
推(车);
警报(car.count+“”+car.limit+“”+car.trigger);
};
警报(yada[2]。计数+测试);
因为您将car声明为局部变量,所以它不会在循环外持久存在,并且您可以在每次循环运行时创建一个新变量,然后将其存储在数组中


这对我有用

了解传递值和传递引用之间的差异非常重要:

Javascript的默认值总是按值传递,但对于对象,变量的值是一个引用。因此,当您传递一个对象并更改其成员时,这些更改将保留在函数之外

您可以通过在for循环中创建一个新的汽车对象来进行调整:

<html>
<body>
<script>


var yada = new Array();

for(var i=0; i<6; i++)
{
    let car = {limit:4, count:0, trigger:0};
    car.count = i+1;
    if(car.count >= car.limit)
    {
        car.trigger = 1;

    }
    yada.push(car);
    alert(car.count+" "+car.limit+" "+car.trigger);
};

alert(yada[2].count + " TEST ");

</script>
</body>
</html>

var yada=新数组();
对于(变量i=0;i=car.limit)
{
car.trigger=1;
}
推(车);
警报(car.count+“”+car.limit+“”+car.trigger);
};
警报(yada[2]。计数+测试);
因为您将car声明为局部变量,所以它不会在循环外持久存在,并且您可以在每次循环运行时创建一个新变量,然后将其存储在数组中


这对我有用

只有一个
car
对象,您每次将其推入数组,因此
yada
中的所有6个条目都指向同一个car对象,其中任何一个的更改都会反映在所有“指针”或数组条目中

您循环并递增
car.count
6次,完成循环后,您将访问数组中
car
count
,它指向相同的
car
对象,现在
car.count
等于6,这就是您看到的。无论访问哪个数组索引,都会得到相同的结果

也许,您想要创建多个
car
对象,请查看

您的构造函数可以如下所示:

function Car() {
    this.limit = 4;
    this.count = 0;
    this.trigger = 0;
}
然后,要创建一个新的
car
对象,您可以说:

var myCar = new Car();

每次将一个
car
对象推入数组时,只有一个
car
对象,因此
yada
中的所有6个条目都指向同一个car对象,其中任何一个的更改都会反映在所有“指针”或数组条目中

您循环并递增
car.count
6次,完成循环后,您将访问数组中
car
count
,它指向相同的
car
对象,现在
car.count
等于6,这就是您看到的。无论访问哪个数组索引,都会得到相同的结果

也许,您想要创建多个
car
对象,请查看

您的构造函数可以如下所示:

function Car() {
    this.limit = 4;
    this.count = 0;
    this.trigger = 0;
}
然后,要创建一个新的
car
对象,您可以说:

var myCar = new Car();

在您的数组中只有一辆
car
具有多个引用。您需要从当前
汽车创建一个新对象

var-car={limit:4,count:0,trigger:0};
var yada=新数组();
对于(变量i=0;i=car.limit)
{
car.trigger=1;
}
push(Object.assign({},car));
};

console.log(yada)在您的数组中只有一辆
汽车
具有多个引用。您需要从当前
汽车创建一个新对象

var-car={limit:4,count:0,trigger:0};
var yada=新数组();
对于(变量i=0;i=car.limit)
{
car.trigger=1;
}
push(Object.assign({},car));
};

console.log(yada)只有一辆
汽车
您将多次引用推送到同一辆汽车上。因此,数组中的所有元素都是一个元素-一个对汽车对象的引用只有一个
car
您将多次引用推送到同一辆汽车上。所以数组中的所有元素都是一个元素-对car objectVariables的引用是函数作用域,您的car变量存在于for-loopTrue之外,为了正确性,我将其更改为let。尽管如此,代码仍然有效。变量是函数作用域,您的car变量存在于for-loopTrue之外,为了正确性,我将其更改为let。尽管如此,代码仍然有效。