一、Object.assign(目标对象,源对象)
浅复制、合并、拷贝、
通过复制一个或多个对象来创建一个新的对象。
继承属性和不可枚举的属性是不能被拷贝的
将所有源对象的所有属性复制到目标对象上,并且返回目标对象
不能复制不可枚举属性
var o=Object.assign({},obj,obj1);
var o ={...obj,...obj1}//复制,重新变成1个新对象
二、Object.keys(o)
获取o对象自身可枚举属性名称的所有key组成的数组
let obj = {
name:'张三',
age:18
};
let keys = Object.keys(obj);
console.log(keys); // 结果 ['name', 'age']
三、Object.values(o)
获取o对象自身可枚举值的所有value组成的数组
let obj = {
name:'张三',
age:18
};
let values = Object.values(obj);
console.log(values); // 结果 ['张三', 18]
四、Object.entries(o)
返回给定对象自身可枚举属性的[key, value]数组
let obj = {
name:'张三',
age:18
};
let kv = Object.entries(obj);
console.log(kv); // 结果 [['name', '张三'], ['age', 18]]
五、Object.is()
判断两个值是否相同,所有 NaN 值都相等(这与==和===不同)
如果下列任何一项成立,则两个值相同:
- 两个值都是 undefined
- 两个值都是 null
- 两个值都是 true 或者都是 false
- 两个值是由相同个数的字符按照相同的顺序组成的字符串
- 两个值指向同一个对象
- 两个值都是数字并且
- 都是正零 +0
- 都是负零 -0
- 都是 NaN
- 都是除零和 NaN 外的其它同一个数字
Object.is({}, {})// false
+0 === -0 //true
NaN === NaN // false
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true
六、Object.fromEntries
Object.entries的反向操作,把array转换为object 。
该方法可以把键值对列表转化为一个对象,入参可以是一个Map、Set、Array类型,或者其他实现了可迭代协议的可迭代对象。
let obj = {
name:'张三',
age:18
};
let kv = Object.entries(obj);
let ko = Object.fromEntries(kv);
console.log(kv); // 结果 [['name', '张三'], ['age', 18]]
console.log(ko); // 结果 {name: '张三', age: 18}
七、delete 删除对象的属性
let obj = {
name:'张三',
age:18,
sex:'男'
};
let del1 = delete obj.sex;
let del2 = delete obj.aaa;
console.log(del1); // 结果 true 执行删除操作,删除对应的属性名,执行后返回true
console.log(del2); // 结果 true 无论对象内部是否有对应的属性名,执行后都返回true
console.log(obj); // 结果 {name: '张三', age: 18}
八、 Object.defineProperty(对象,属性名,属性描述对象);
**Object.defineProperty()** 方法会直接在一个对象上定义一个新属性(可以定义Symbol类型),或者修改一个对象的现有属性,并返回此对象。
let obj = {
name:'张三',
sex:'男'
};
Object.defineProperty(obj,'age',{
configurable: true, // 是否可以删除, 默认为 false
enumerable: true, // 是否可以枚举, 默认为 false
value: 18, // 赋值, 默认为 undefined
})
console.log(obj); // 结果 {name: '张三', sex: '男', age: 18}
console.log(obj.age); // 结果 18
九、Object.create()
使用指定的原型对象和属性创建一个新对象。
十、Object.defineProperties()
给对象添加多个属性并分别指定它们的配置。
十一、Object.freeze()
冻结对象:其他代码不能删除或更改任何属性。
十二、Object.isExtensible()
判断对象是否可扩展。
十三、Object.isFrozen()
判断对象是否已经冻结。
十四、Object.isSealed()
判断对象是否已经密封。
十五、Object.getOwnPropertyNames(obj)
获取对象的所有属性名,返回属性名组成的数组,Symbol不能获取
十六、Object.getOwnPropertySymbols(obj)
获取对象的所有Symbol属性名,返回属性名组成的数组
十七、Object.getOwnPropertyDescriptor(obj,"d")
获取属性的描述对象
十八、Reflect.deleteProperty(obj,"c")
删除对象属性
十九、 Object.seal(obj)
可以修改,不能删除,不能添加属性
二十、 Object.preventExtensions(obj)
可以修改,可以删除,但是不能添加新属性,不能扩展
二十一、Object.getOwnPropertyDescriptors(obj)
获取对象中所有属性的描述对象列表对象
二十二、Object.getPrototypeOf(obj)
获取obj对象的原型链
二十三、Object.setPrototypeOf(o1,o)
设置对象的原型链
二十四、 判断对象的对象属性是否包含这个属性名
console.log(o1.hasOwnProperty("b"))
console.log(Object.hasOwn(o1,"b"))