SOURCE

// 一、Object添加新属性
let obj = {}

// 点语法
obj.a = 11

// Object.assign 添加新属性  (只拷贝对象自身的可枚举的属性)
Object.assign(obj,{b:22})

// Object.defineProperty 添加新属性
Object.defineProperty(obj,'c',{value:33,writable:true})


console.log(obj)  // {a:11,b:22,c:33}

// 二、对象属性的遍历

// for in  返回可枚举的属性
for (let val in obj) {
    console.log(val)  // a b 
} 


// Object.keys  返回一个数组,包括对象自身的所有可枚举属性(不包含Symbol)
console.log(Object.keys(obj))  // ['a','b']

// Object.entries 返回一个数组,包含对象自身的所有可枚举键值对
console.log(Object.entries(obj)) // [["a",11],["b",22]]

// Object.getOwnPropertyNames 返回一个数组,包含对象自身的 所有 属性
console.log(Object.getOwnPropertyNames(obj))  // ['a','b','c']

// Object.getOwnPropertySymbols 返回一个给定对象自身的所有 Symbol 属性的数组
let MySymbol = Symbol('lisa')
Object.defineProperty(obj,MySymbol,{value:44,writable:true})
console.log(Object.getOwnPropertySymbols(obj)) // [Symbol(lisa)]

//  Reflect.ownKeys(obj) 返回一个数组,包含对象自身的所有键名
console.log(Reflect.ownKeys(obj)) // ['a','b','c','Symbol(lisa)']

// 三、对象的扩展运算符
let obj1 = {
    a:11,
    b:22,
    c:33
}

console.log({...obj1})  // {"a":11,"b":22,"c":33}

// 四、Object.is  相当于严格运算符  === 
console.log(Object.is('aaa','aaa'))
console.log(Object.is({},{}))

// 五、Object.assign 将原对象的所有可枚举属性,复制到目标对象
let fun = {name:'lisa'}
console.log(Object.assign(fun,{age:17})) //  {"name":"lisa","age":17}

// 如果有属性一致,后面的属性覆盖前面的
console.log(Object.assign(fun,{age:19}))  //  {"name":"lisa","age":19}

// 如果只有一个参数(原对象) 则直接返回原对象
console.log(Object.assign(fun))  // {"name":"lisa","age":19}

// 原始类型数据会转换成 Object 类型数据
console.log(typeof Object.assign(fun,111))  //  object

// 六、Object.getOwnPropertyDescriptors 方法返回一个对象,所有原对象的属性名都是该对象的属性名,对应的属性值就是该属性的描述对象
let func = {a:1}
console.log(Object.getOwnPropertyDescriptors(func)) // {"a":{"value":1,"writable":true,"enumerable":true,"configurable":true}}

// 七、原型链操作方法 Object.setPrototypeOf(object, prototype)
let proto = {}
let obj4 = {c:3}
// 此时 proto 就是 obj4的原型,所以obj4可以读取 proto对象的属性
Object.setPrototypeOf(obj4, proto);
proto.a = 1 // 往obj4的原型上挂载属性
proto.b = 2 // 往obj4的原型上挂载属性
console.log(obj4.a,obj4.b,obj4.c)  // 1,2,3

// Object.getPrototypeOf(obj) 获取原型上的属性
console.log(Object.getPrototypeOf(obj4)) // {a:1,b:2}


// 八、对象的遍历
let Obj = {a:1,b:2,c:3}
let Symbol1 = Symbol('iu')
Object.defineProperty(Obj,Symbol1,{value:'iu'})

// ①、Object.keys 返回一个数组,包含着所有可枚举的属性
console.log(Object.keys(Obj))  // ["a","b","c"]
// ②、Object.values 返回一个数组,包含着所有可枚举属性的值
console.log(Object.values(Obj)) // [1,2,3]
// ③、Object.entries  返回一个数组,包含着所有可枚举的键值对
console.log(Object.entries(Obj)) // [["a",1],["b",2],["c",3]]
// ④、Object.getOwnPropertyNames  返回一个指定对象的所有属性,不包含 Symbol
console.log(Object.getOwnPropertyNames(Obj))  //  ['a','b','c']
// ⑤、Object.getOwnPropertySymbols 获取一个对象中的 Symbol
console.log(Object.getOwnPropertySymbols(Obj)) // [Symbol(iu)]
console 命令行工具 X clear

                    
>
console