js之实战书写


for…in
1
2
3
4
5
for(let key in obj){
if(obj.hasOwnProperty(key)){
console.log(key+' is '+obj[key]);
}
} //a is 1,b is 2
JSON.stringify()遇到undefined,函数,symbol值会忽略的问题

不好的地方:拷贝了之后会抛弃对象的constructor,所以深拷贝后构造函数都会变成Object

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let 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
});