使用JSON.parse(JSON.stringify(obj))是一个老把戏,我已经看到了很多用于深度复制对象。它创建了一个真正的'深度复制'的对象吗?性能方面,它被认为是明智的使用?
JSON.parse(JSON.stringify(obj))
bzzcjhmw1#
使用此方法深度复制对象的最大问题是对象必须是JSON可序列化的。例如,以下对象:
let obj = { func: function() { console.log("hello world!"); } }
因为函数不是JSON可序列化的,所以不能被正确复制。还有很多其他的问题,比如循环引用。这只适用于简单的普通对象,因此不是一个特别好的解决方案。我建议检查像下划线或长划线这样的东西来实现高性能的深度复制。
lp0sw83n2#
JSON.parse(JSON.stringify(obj))存在一些问题对于大多数开发人员来说,主要的问题是丢失不属于JSON spec的任何内容
JSON方法在解析循环引用时也会抛出异常。也就是说它确实有一些优势:
至于创建对象的真正深层副本...它将是一个真正的深层副本,因为它将尽可能深入对象的多个级别,而不是因为它将丢弃某些信息,如上所述。
2条答案
按热度按时间bzzcjhmw1#
使用此方法深度复制对象的最大问题是对象必须是JSON可序列化的。例如,以下对象:
因为函数不是JSON可序列化的,所以不能被正确复制。还有很多其他的问题,比如循环引用。这只适用于简单的普通对象,因此不是一个特别好的解决方案。我建议检查像下划线或长划线这样的东西来实现高性能的深度复制。
lp0sw83n2#
JSON.parse(JSON.stringify(obj))
存在一些问题对于大多数开发人员来说,主要的问题是丢失不属于JSON spec的任何内容
JSON方法在解析循环引用时也会抛出异常。
也就是说它确实有一些优势:
至于创建对象的真正深层副本...它将是一个真正的深层副本,因为它将尽可能深入对象的多个级别,而不是因为它将丢弃某些信息,如上所述。