Javascript JSON.parse(JSON.stringify(obj))如何深度克隆对象?

Javascript JSON.parse(JSON.stringify(obj))如何深度克隆对象?,javascript,Javascript,我在网上搜索关于深度克隆javascript obj的文章,但是大多数人说使用JSON.parse(JSON.stringify(obj))可以做到这一点, 不要解释为什么此方法将深度克隆obj?JSON.stringify将JavaScript对象转换为JSON文本,并将该JSON文本存储在字符串中,例如: var my_object = { key_1: "some text", key_2: true, key_3: 5, key_6: [{}] }; var object_as_str

我在网上搜索关于深度克隆javascript obj的文章,但是大多数人说使用
JSON.parse(JSON.stringify(obj))
可以做到这一点,
不要解释为什么此方法将深度克隆obj?

JSON.stringify将JavaScript对象转换为JSON文本,并将该JSON文本存储在字符串中,例如:

var my_object = { key_1: "some text", key_2: true, key_3: 5, key_6: [{}] };

var object_as_string = JSON.stringify(my_object);  
// "{"key_1":"some text","key_2":true,"key_3":5,"key_6":[{}]}"

typeof(object_as_string);  
// "string"  
所以在这里,所有
对象
数组
都失去了它的引用

当我们执行
JSON.parse
时,会将JSON文本字符串转换为JavaScript对象,例如:

var object_as_string_as_object = JSON.parse(object_as_string);  
// {key_1: "some text", key_2: true, key_3: 5, key_6: Array(1)}

typeof(object_as_string_as_object);  
// "object" 
现在,生成的对象获得了新的存储引用。让我们通过检查父对象
array
的引用来测试它

my_object.key_6 === my_object.key_6
// true  
但是,如果我们尝试

 my_object.key_6 === object_as_string_as_object.key_6
// false

JSON.stringify
将整个对象转换为JSON
获取JSON并构造一个新对象……JSON只是一个字符串。字符串不可能包含对对象的任何引用……除了@VLAZ所说的之外,它实际上并没有克隆所有内容。它不会像JS类那样复制函数或自定义类型信息。您只能使用一些原语,如数字、布尔值、字符串、对象和数组。@此外,它还将删除所有未定义的
属性,因此如果属性的值为
未定义的
,它将类似地消失,就像它是一个函数一样。但是
null
属性很好。。。因为
null
是一个对象。