JOSN.parse(JSON.stringify())实现深拷贝的缺点

首先推荐在项目中引用 lodash 三方工具库cloneDeep方法用来做数据深拷贝。

// import { cloneDeep } from 'lodash';
import cloneDeep from 'lodash/cloneDeep';// 只引用一个 推荐这样写
let a = cloneDeep({});
var obj = {
        name: 'zhangsan',
        date: new Date(),
        regExp: new RegExp("\w+"),
        fun: function () { return true;},
        err: new Error('error'),
        symbol: Symbol(233),
        undefined: undefined,
        null: null,
        nan: NaN,
        infinity: Infinity // 无穷大

1. 两种打印结果

console.log(obj); // 正常
console.log(JOSN.parse(JSON.stringify(obj))); // 部分数据丢失或转义
微信截图_20220123233554.png

4. 如果声明的obj中有属性是由new 出来的构造函数生成的,则使用JSON.parse(JSON.stringify(xxx))深拷贝之后,会丢弃对应的constructor初始化构造器;

    function newFun(name) {
        this.name = name;
    let zhangsan = new newFun('张三');
    let newObj = {
        date:zhangsan
    let lisi = JSON.parse(JSON.stringify(newObj));
    console.log('__',newObj, lisi);
        date: new Date(), // 被转义为字符
        regExp: new RegExp("\w+"), // 丢失
        fun: function () { return true;}, // 丢失
        err: new Error('error'), // 丢失
        symbol: Symbol(233), // 丢失
        undefined: undefined, // 丢失
        null: null,
        nan: NaN, // 被转义null
        infinity: Infinity // 无穷大被转义null