使用 JSON.parse(JSON.stringify(obj)) 深度复制对象有什么危险?

use*_*455 4 javascript json object

使用JSON.parse(JSON.stringify(obj))是我见过很多用于深度复制对象的老技巧。它是否创建了对象的真正“深层复制”?从性能角度来看,使用它是否明智?

tre*_*son 5

使用此方法深度复制对象的最大问题是该对象必须是 JSON 可序列化的。例如,以下对象:

let obj = {
    func: function() {
        console.log("hello world!");
    }
}
Run Code Online (Sandbox Code Playgroud)

由于函数不可 JSON 序列化,因此无法正确复制。还有许多其他问题,例如循环引用。这实际上只适用于简单、普通的对象,因此不是一个特别好的解决方案。我建议检查下划线或 lodash 之类的东西以实现高性能深度复制。