JavaScript将对象变量推入数组,发生值更改

jpg

例如,我声明了一个对象,json并在for循环中,我更改了json的值并将其推入list2中,但是它没有输出我期望的值。

var json = {
    value: '',
    text: '',
};

let list = [
    {
        a: 1,
        b: 2,
        c: 3
    },
    {
        a: 4,
        b: 5,
        c: 6
    }
];
let list2 = [];
for(i = 0; i < list.length; i++){
    json.value = list[i].a;
    json.text = list[i].b;

    list2.push(json);
}

console.log(list2)

预期的输出是

list2 = [
    {
        value: 1,
        text: 2,
    },
    {
        value: 4,
        text: 5,
    }
];

但事实是:

list2 = [
    {
        value: 4,
        text: 5,
    },
    {
        value: 4,
        text: 5,
    }
];

为什么?

PS:我知道如何避免这个问题,但我不明白为什么会发生

比拉尔·西迪基(Bilal Siddiqui)

Javascript具有按值传递的5种数据类型:布尔值,空值,未定义,字符串和数字。称为原始类型。

Javascript具有3种通过引用传递的数据类型:数组,函数和对象。

因此,在您的情况下,json是一个对象,更改其值将反映为参照。

持有对象的变量不会“直接”持有对象。它持有的是对对象的引用。当您将该引用从一个变量分配给另一个变量时,就是在复制该引用。现在,两个变量都拥有对对象的引用。通过该引用修改对象会更改持有该对象引用的两个变量。

尽管您具有列表数组,但推送json会在其中推送其引用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaScript-将对象推入数组失败

来自分类Dev

将对象推入数组

来自分类Dev

将对象推入数组

来自分类Dev

尝试将对象推入 mongodb 数组时发生错误

来自分类Dev

将对象推入数组失败

来自分类Dev

如何将对象推入JavaScript原型内部的数组中?

来自分类Dev

将对象数组推入对象数组

来自分类Dev

将对象推入和对象Javascript

来自分类Dev

将对象推入空数组,在实例变量中返回填充的数组。-RoR

来自分类Dev

如何使用AngularJS将对象推入数组

来自分类Dev

使用构造函数将对象推入数组?

来自分类Dev

使用forEach将对象推入数组

来自分类Dev

无法将对象推入数组中

来自分类Dev

如何将对象从数组推入角度

来自分类Dev

将对象推入嵌套的化简器数组?

来自分类Dev

以编程方式将对象推入数组

来自分类Dev

如何将对象推入数组?

来自分类Dev

如何将对象推入数组?

来自分类Dev

如何将对象推入空数组

来自分类Dev

将对象从函数工厂推入数组

来自分类Dev

将对象推入 $.each 中的数组

来自分类Dev

从JSON响应中提取对象后,将对象推入Javascript数组中

来自分类Dev

将javascript变量推入数组

来自分类Dev

JavaScript:推入对象内部的数组?

来自分类Dev

Javascript推入数组中的对象

来自分类Dev

无法将对象推入嵌套对象中的数组

来自分类Dev

angular2 数组将对象推入对象中

来自分类Dev

尝试将对象推入数组,数组未定义

来自分类Dev

将对象数组推入数组的最佳方法是什么