• <small id='ycILF'></small><noframes id='ycILF'>

  • <i id='ycILF'><tr id='ycILF'><dt id='ycILF'><q id='ycILF'><span id='ycILF'><b id='ycILF'><form id='ycILF'><ins id='ycILF'></ins><ul id='ycILF'></ul><sub id='ycILF'></sub></form><legend id='ycILF'></legend><bdo id='ycILF'><pre id='ycILF'><center id='ycILF'></center></pre></bdo></b><th id='ycILF'></th></span></q></dt></tr></i><div id='ycILF'><tfoot id='ycILF'></tfoot><dl id='ycILF'><fieldset id='ycILF'></fieldset></dl></div>
      <bdo id='ycILF'></bdo><ul id='ycILF'></ul>
      <tfoot id='ycILF'></tfoot>

      1. <legend id='ycILF'><style id='ycILF'><dir id='ycILF'><q id='ycILF'></q></dir></style></legend>
      2. 修改 JavaScript 对象的副本会导致原始对象发生变化

        时间:2023-10-02

        <small id='1kC3T'></small><noframes id='1kC3T'>

          <tbody id='1kC3T'></tbody>

          <legend id='1kC3T'><style id='1kC3T'><dir id='1kC3T'><q id='1kC3T'></q></dir></style></legend>

              <tfoot id='1kC3T'></tfoot>
            1. <i id='1kC3T'><tr id='1kC3T'><dt id='1kC3T'><q id='1kC3T'><span id='1kC3T'><b id='1kC3T'><form id='1kC3T'><ins id='1kC3T'></ins><ul id='1kC3T'></ul><sub id='1kC3T'></sub></form><legend id='1kC3T'></legend><bdo id='1kC3T'><pre id='1kC3T'><center id='1kC3T'></center></pre></bdo></b><th id='1kC3T'></th></span></q></dt></tr></i><div id='1kC3T'><tfoot id='1kC3T'></tfoot><dl id='1kC3T'><fieldset id='1kC3T'></fieldset></dl></div>
                <bdo id='1kC3T'></bdo><ul id='1kC3T'></ul>
                • 本文介绍了修改 JavaScript 对象的副本会导致原始对象发生变化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我正在将 objA 复制到 objB

                  const objA = { prop: 1 }, 
                  const objB = objA; 
                  objB.prop = 2;
                  console.log(objA.prop); // logs 2 instead of 1
                  

                  数组也有同样的问题

                  const arrA = [1, 2, 3], 
                  const arrB = arrA; 
                  arrB.push(4); 
                  console.log(arrA.length); // `arrA` has 4 elements instead of 3.
                  

                  推荐答案

                  很明显,您对语句 var tempMyObj = myObj; 的作用有一些误解.

                  It is clear that you have some misconceptions of what the statement var tempMyObj = myObj; does.

                  在 JavaScript 中,对象是通过引用传递和分配的(更准确地说是引用的值),所以 tempMyObjmyObj 都是对同一个对象的引用.

                  In JavaScript objects are passed and assigned by reference (more accurately the value of a reference), so tempMyObj and myObj are both references to the same object.

                  这是一个简化的插图,可以帮助您直观地了解正在发生的事情

                  Here is a simplified illustration that may help you visualize what is happening

                  // [Object1]<--------- myObj
                  
                  var tempMyObj = myObj;
                  
                  // [Object1]<--------- myObj
                  //         ^ 
                  //         |
                  //         ----------- tempMyObj
                  

                  正如你在赋值后看到的,两个引用都指向同一个对象.

                  As you can see after the assignment, both references are pointing to the same object.

                  如果您需要修改一个而不是另一个,则需要创建一个副本.

                  You need to create a copy if you need to modify one and not the other.

                  // [Object1]<--------- myObj
                  
                  const tempMyObj = Object.assign({}, myObj);
                  
                  // [Object1]<--------- myObj
                  // [Object2]<--------- tempMyObj
                  

                  旧答案:

                  以下是创建对象副本的其他几种方法

                  Here are a couple of other ways of creating a copy of an object

                  既然你已经在使用 jQuery:

                  Since you are already using jQuery:

                  var newObject = jQuery.extend(true, {}, myObj);
                  

                  使用原生 JavaScript

                  With vanilla JavaScript

                  function clone(obj) {
                      if (null == obj || "object" != typeof obj) return obj;
                      var copy = obj.constructor();
                      for (var attr in obj) {
                          if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
                      }
                      return copy;
                  }
                  
                  var newObject = clone(myObj);
                  

                  请参阅此处和这里

                  这篇关于修改 JavaScript 对象的副本会导致原始对象发生变化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:查找 div 元素中的所有链接并将其全部禁用 下一篇:将 JavaScript 变量的输出复制到剪贴板

                  相关文章

                • <legend id='NRRmE'><style id='NRRmE'><dir id='NRRmE'><q id='NRRmE'></q></dir></style></legend>
                  • <bdo id='NRRmE'></bdo><ul id='NRRmE'></ul>
                  1. <small id='NRRmE'></small><noframes id='NRRmE'>

                    <tfoot id='NRRmE'></tfoot>
                    1. <i id='NRRmE'><tr id='NRRmE'><dt id='NRRmE'><q id='NRRmE'><span id='NRRmE'><b id='NRRmE'><form id='NRRmE'><ins id='NRRmE'></ins><ul id='NRRmE'></ul><sub id='NRRmE'></sub></form><legend id='NRRmE'></legend><bdo id='NRRmE'><pre id='NRRmE'><center id='NRRmE'></center></pre></bdo></b><th id='NRRmE'></th></span></q></dt></tr></i><div id='NRRmE'><tfoot id='NRRmE'></tfoot><dl id='NRRmE'><fieldset id='NRRmE'></fieldset></dl></div>