首先推荐在项目中引用 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))); // 部分数据丢失或转义
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