首先举荐在我的项目中援用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};

1. 两种打印后果

console.log(obj); // 失常console.log(JOSN.parse(JSON.stringify(obj))); // 局部数据失落或本义

3. 深拷贝循环援用对象 会引起报错(lodash能够深拷贝)

 var a = {}; a.b = a; console.log(a); // 内存指向互相援用 无止境 但不会内存溢出 console.log(JOSN.parse(JSON.stringify(a))); // 间接报错 

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

    function newFun(name) {        this.name = name;    }    let zhangsan = new newFun('张三');    let newObj = {        name:'刘十三000',        date:zhangsan    }    let lisi = JSON.parse(JSON.stringify(newObj));    console.log('__',newObj, lisi);

5. 总结

JOSN.parse(JSON.stringify()) 的深拷贝模式中

1.工夫new Date()

2.正则new RegExp()

3.函数function

4.new Error对象

5.Symbol()

6.undefined

7.NaN

都会呈现不同水平的失落和变动

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 // 被本义null    };

PS: 只是用来深拷贝 纯数据当然能够用JOSN.parse(JSON.stringify(xxx))。

然而 为了进步本身的代码品质,还是请严格一点。