# 方法总结

# 方法汇总

// json对象和json字符串之间的转换
JSON.parse(str)
JSON.stringify(obj)

// 获取对象长度
Object.keys(obj).length;
Object.values(obj).length;

// 获取对象key值
Object.keys(obj);                   // 可枚举属性
Object.getOwnPropertyNames(obj);    // 包括不可枚举属性

let keys =[];
for(key in one) {
    keys.push(key)); 
}

# 合并两个对象

# Object.assign()

Object.assign(target, ...sources)

Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

let one = { name: 'Libai', address: 'Shenzhen'};
let two = { hobby: 'Quiet', yearn : 'Freedom' };

let newObj = Object.assign({}, one, two);

console.log(newObj)   //{name: "Libai", address: "Shenzhen", hobby: "piano", yearn: "freedom"}
console.log(one)      // {name: 'Libai', address: 'Shenzhen'}

# 遍历合并

for (var key in two) {
    if (two.hasOwnProperty(key) === true) {
        one[key] = two[key];
    }
}

# freeze()

Object.freeze()方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze()返回和传入的参数相同的对象。

const obj = {
    a: 2,
    b: {
        c: 3
    }
}
Object.freeze(obj);

obj.a = 34;
// Throws an error in strict mode

console.log(obj.a); // 2

对象里面的属性值,如果是对象,则可以修改属性值里面的属性,因为指向的不是同一个内存地址,需要再次冻结

obj.b.c = 31;
console.log(obj.b.c)    // 31
Object.freeze(obj.b);   // ok