开发者社区> 问答> 正文

对象是否以javascript的深层或浅层副本推送到数组中?

一个不言而喻的问题...当在javascript中的数组上使用.push()时,对象是指针(浅)还是实际对象(深)推入数组,而不管类型如何。 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-08 22:00:58 456 0
1 条回答
写回答
取消 提交回答
  • 这取决于您要推动什么。将对象和数组作为指向原始对象的指针进行推送。内置的原始类型(如数字或布尔值)将作为副本推送。因此,由于不以任何方式复制对象,因此没有深层或浅层对象。

    这是显示它的工作片段:

    var array = []; var x = 4; let y = {name: "test", type: "data", data: "2-27-2009"};

    // primitive value pushes a copy of the value 4 array.push(x); // push value of 4 x = 5; // change x to 5 console.log(array[0]); // array still contains 4 because it's a copy

    // object reference pushes a reference array.push(y); // put object y reference into the array y.name = "foo"; // change y.name property console.log(array[1].name); // logs changed value "foo" because it's a reference

    // object reference pushes a reference but object can still be referred to even though original variable is no longer within scope if (true) { let z = {name: "test", type: "data", data: "2-28-2019"}; array.push(z); }

    console.log(array[2].name); // log shows value "test" since the pointer reference via the array is still within scope

    2020-02-08 22:02:11
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript异步编程 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载