gpt4 book ai didi

javascript - 如何在循环中更新对象属性?

转载 作者:行者123 更新时间:2023-11-30 07:38:17 25 4
gpt4 key购买 nike

当我尝试使用循环来更改为对象中的属性设置的值时,我发现了一种我没有预料到的行为。

基本上,我在循环外声明我的对象。然后我在一个数值数组上循环,这些值用于更新对象属性。在循环内,我将当前对象状态存储在外部数组中。

结果是,我没有使用包含一系列具有不同数值的对象的数组,而是在每个存储的对象中存储了相同的数值。

这是 fiddle http://jsfiddle.net/fAypL/1/

jQuery(function(){

var object_container = [];

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

var my_object = {};


jQuery.each(numeric_values, function(index, value){
my_object['value'] = value;
object_container.push(my_object);
});

jQuery.each(object_container, function(index, value){
jQuery('#content').prepend(value['value']);
});

});

我希望得到 1 2 3 4 作为存储在每个对象中的值,但是,我得到的是 4 4 4 4,这对我来说没有意义。

非常欢迎任何关于此行为的提示,谢谢

最佳答案

当您的代码调用 .push() 并传递 my_object 时,传递的是对该对象的引用。没有复制。

因此,您已将对完全相同对象的四个引用推送到数组中。

JavaScript 对象总是以引用的形式参与表达式。没有其他方法可以处理对象。因此,当您创建一个变量并将其值设置为一个对象时,您实际上是在将其值设置为对该对象的引用。与参数传递相同,对象可以出现在表达式中的任何其他地方。

在这种情况下,您可以很容易地创建新对象;只需省去 my_object 并在每次迭代时推送一个新对象:

    object_container.push( { value: value } );

关于javascript - 如何在循环中更新对象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24766826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com