将对象复制到JavaScript

时间:2016-01-15 12:44:35

标签: javascript json

我正在做一个小例子来显示JSON(键和值)。当我将JSON复制到另一个变量时,我试图删除键Age并重新显示第一个JSON。第一个JSON中的键Age也已被删除。

$('button').click(function () {
  var json = {};
  json['Name'] = 'Hermione';
  json['Age'] = 19;
  
  for (i in json) {
    $('body').append($('<p>').text(i + ': ' + json[i]))
  }
   
  var copy = json;
  delete copy['Age'];
  
  for (i in json) {
    $('body').append($('<p>').text(i + ': ' + json[i]))
  }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Click me</button>

所以,我的问题是:将对象复制到另一个对象在JavaScript中没有任何意义,对吧?

我认为,因为当我复制它时,它仍然在主版本(json)上运行,而不是在复制版本(copy)上运行。

6 个答案:

答案 0 :(得分:1)

var copy = json;将创建json对象的引用。

  

Javascript对象为mutable,这意味着如果从一个对象中删除属性,则引用该对象的另一个对象也将丢失该密钥。

如果您不希望这种情况发生,那么请查找将创建新独立对象的deep copy个javascript对象。

答案 1 :(得分:1)

这是因为你只是将同一个对象分配给另一个变量。 如果你真的想复制对象,你可以使用jquery的扩展函数。

[35, …]

有关“克隆”js对象的更深入信息,请参阅此thread

答案 2 :(得分:1)

您的var copy = json是对json的引用,而不是json的副本。 它只是指向内存中相同位置的指针。 因此,只要您说delete copy["Age"],就会引用json["Age"]

答案 3 :(得分:1)

你不能简单地将对象复制到另一个变量,如var copy = json;,因为对象是通过引用分配的。

试,

var copy = JSON.parse(JSON.stringify(json));

答案 4 :(得分:1)

var copy = json;只需创建一个名为&#34; copy&#34;的新变量。 (指针),指向对象&#34; json&#34;。你没有复制&#34;任何东西。你只是说我要给json另一个名字,名字是&#34; copy&#34;。如果要递归克隆对象,则需要编写一个函数来执行它或使用下划线/ lodash&#39; s _.cloneDeep()

var objects = [{ 'a': 1 }, { 'b': 2 }];

var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// → false

答案 5 :(得分:-1)

其工作

<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script>
        function myFunction() {
            var json = {};
            json['Name'] = 'Hermione';
            json['Age'] = 19;
            for (i in json) {
                $('body').append($('<p>').text(i + ': ' + json[i]))
            }
            var copy = json;
            delete copy['Age'];
            for (i in json) {
                $('body').append($('<p>').text(i + ': ' + json[i]))
            }
        }
    </script>
</head>
<body>
    <input type="button" class="button" onclick="myFunction()" value="Click me"> 
</body>