如何在javascript数组元素中显示正确的值?
在下面的代码中,我创建了一个car对象,并通过增加计数修改了一个元素。每次我修改汽车,我都会把它推到一个叫做yada的阵列上。最后,我访问放入yada数组的第三辆车,查看计数是多少,但它报告的计数是6,而不是我预期的3如何在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++) {
<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。尽管如此,代码仍然有效。