for…in
1 | for(let key in obj){ |
JSON.stringify()遇到undefined,函数,symbol值会忽略的问题
不好的地方:拷贝了之后会抛弃对象的constructor,所以深拷贝后构造函数都会变成Object1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16let obj = { x: undefined, y: function(){}, z: Symbol('') }
JSON.stringify(obj) // "{}" 全部都忽略
// 解决方案
let str = JSON.stringify(obj, function(key, val){
if (typeof val === 'undefined') return ''
if (typeof val === 'function') return val + ''
return val
})
let obj1 = JSON.parse(str, function(k,val){
if(val.indexOf && val.indexOf('function') > -1){
return eval("(function(){return " + val + " })()")
}
return val
});