// 一、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