Node-JS专精07手写深拷贝

手写深拷贝

如何答题?

步骤

  • 询问数据类型
  • 询问数据规模
  • 询问性能要求
  • 询问运行环境
  • 询问其他要求
  • 开始写

JSON数据格式有哪些

JSON序列化和反序列化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var obj = {
name:'abc',
age:18,
birthDate:new Date(2018,1,1), // 会变成日期字符串
exp:/hi/ , // 会被忽略
body:{
leg:4,
head:'one',
eye:['left','right'],
color:'red'
},
s:Symbol("a"), // 会被忽略
gender:undefined, // 会被忽略
sayHi:function(){console.log('hello')} // 会被忽略
}

// 序列化
var obj_str = JSON.stringify(obj)

// 反序列化
var obj2 = JSON.parse(obj_str)
console.log(obj2)

JSON序列化反序列化的缺点是什么

  • 不支持函数(会被忽略)
  • 不支持 undefined 只支持null
  • 不支持引用(循环引用)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var a = {name:'abc',age:18}
    a.self = a;
    JSON.stringify(a)

    报错
    Converting circular structure to JSON
    --> starting at object with constructor 'Object'
    --- property 'self' closes the circle
    at JSON.stringify (<anonymous>)
    at <anonymous>:3:6
  • 不支持 Date ,JSON.stringify 之后会是 Date的字符串形式

  • 不支持正则表达式
  • 不支持 Symbol

递归深拷贝