Object.keys(obj):获取对象中所有可枚举的键,并返回一个数组。适用于需要遍历对象键的场景。
Object.values(obj):获取对象中所有可枚举的值,并返回一个数组。适用于需要遍历对象值的场景。
Object.entries(obj):获取对象中所有可枚举的键值对,并返回一个数组。适用于需要遍历对象键和值的场景。
Object.assign(target, …sources):将源对象中的所有可枚举属性复制到目标对象中,并返回目标对象。适用于对象合并的场景。
使用Object.assign()来实现浅拷贝。这是因为Object.assign()方法只能复制源对象属性的值,并不会复制它的引用。所以如果源对象的属性是一个对象的引用话,那么只是复制了这个引用。而不是这个引用所指向的对象。让我们来看一下示例代码:
const original = { a: { b: 1 } };
const copy = Object.assign({}, original);
console.log(copy);
console.log(original === copy);
console.log(original.a === copy.a);
如果有多个源对象具有相同的属性,那么最后一个源对象中的属性将覆盖先前源对象中相同名称的属性。最后,咱们再来看这个问题:如果合并的多个对象有相同属性,但是值不同最后结果怎样? 答案就是:后面的属性值将会覆盖前面的。
const obj1= {
name:'jack'
}
const obj2= {
name:'nancy'
}
const obj3= {
name:'Lucas'
}
const obj={}
Object.assign(obj,obj1,obj2,obj3)
console.log(obj);
Object.defineProperty(obj, prop, descriptor):通过定义某个对象上的属性来实现数据劫持。适用于需要控制对象属性怎样被访问和修改的场景。
Object.getOwnPropertyDescriptor(obj, prop):获取指定属性的属性描述符。适用于需要获取属性描述符的场景。
Object.defineProperties(obj, props):定义对象的多个属性。适用于需要定义多个属性的场景。
Object.getOwnPropertyNames(obj):获取对象所有自己拥有的属性名称,无论是否可枚举。适用于需要获取对象所有属性名称的场景。
Object.getOwnPropertySymbols(obj):获取对象自己拥有的所有Symbol类型的属性名称,无论是否可枚举。适用于需要获取对象所有Symbol属性名称的场景。
Object.getPrototypeOf(obj):获取指定对象的原型对象。适用于需要获取对象原型的场景。
Object.setPrototypeOf(obj, proto):设置指定对象的原型对象。适用于需要设置对象原型的场景。
Object.is(value1, value2):判断两个值是否相等。适用于需要判断两个值是否相等的场景。
Object.freeze(obj):冻结对象,使其不可更改。适用于需要保护对象不被更改的场景。
Object.seal(obj):密封对象,使其不能添加或删除属性,但可修改属性的值。适用于需要限制对象修改的场景。
Object.isSealed(obj):判断对象是否被密封。适用于需要判断对象是否被密封的场景。
Object.isFrozen(obj):判断对象是否被冻结。适用于需要判断对象是否被冻结的场景。
Object.fromEntries(entries):将键值对数组转换为对象。适用于需要将数组转换为对象的场景。
Object.create(proto, [propertiesObject]):基于指定的原型对象创建一个新对象。适用于需要创建新对象的场景。
Object.hasOwn(obj, prop):判断对象是否拥有指定属性。适用于需要判断对象是否拥有指定属性的场景。
Object.getOwnPropertyDescriptors(obj):获取指定对象所有属性的属性描述符。适用于需要获取对象所有属性的属性描述符的场景。
Object.values的Polyfill:在不支持Object.values的环境中实现该方法。适用于需要兼容低版本环境的场景。
Object.entries的Polyfill:在不支持Object.entries的环境中实现该方法。适用于需要兼容低版本环境的场景。
Object.assign的Polyfill:在不支持Object.assign的环境中实现该方法。适用于需要兼容低版本环境的场景。
Object.keys的Polyfill:在不支持Object.keys的环境中实现该方法。适用于需要兼容低版本环境的场景。
Object.preventExtensions(obj):阻止对象扩展,使其不能添加新属性。适用于需要限制对象扩展的场景。
Object.isExtensible(obj):判断对象是否可扩展。适用于需要判断对象是否可扩展的场景。
Object.assign(target,…sources)的深拷贝:将源对象中的属性和子对象递归地复制到目标对象中,并返回目标对象。适用于需要实现深拷贝的场景。
Object.entries的map用法:将对象转换为数组后,用map方法对数组进行操作,返回一个新的数组。适用于需要对对象进行操作的场景。
Object.entries的reduce用法:将对象转换为数组后,用reduce方法对数组进行遍历和累加,返回一个新的值。适用于需要对对象进行数据处理的场景。
Object.create的Polyfill:在不支持Object.create的环境中实现该方法。适用于需要兼容低版本环境的场景。