项目中常使用的Object方法
Object.assign():用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象
// 复制一个对象 const obj = {a: 1, b: 2}; const obj1 = Object.assign({}, obj); console.log(obj1); //{a: 1, b: 2}; obj.a = 2; console.log(obj1); //{a: 1, b: 2}; // 针对深拷贝,需要使用其他的办法,因为Object.assign拷贝的是属性值 // 加入源值是一个对象的引用,它仅仅会复制其引用值 const obj = {a: 1, b: {c: 3}}; const obj1 = Object.assign({}, obj); console.log(obj1); // {a: 1, b: {c: 3}} obj.b.c = 4 coonsole.log(obj1); //{a: 1, b: {c: 4}} // 合并具有相同属性的对象 const o1 = {a: 1, b: 1, c: 1}; const o2 = {b: 2, c: 2}; const o3 = {c: 3}; const obj = Object.assign({}, o1, o2, o3); console.log(Obj): //{a: 1, b: 2, c: 3} //属性会被后续参数中具有相同属性的其他对象覆盖 // 原始类型会被包装为对象 // 原始类型会被包装,null 和 undefined 会被忽略。 // 注意,只有字符串的包装对象才可能有自身可枚举属性。 const o1 = {a: 1, b: 1, c: 1}; const o2 = {a: 2, b: 2}; const o3 = {c: 3}; const o4 = "abc"; const obj = Object.assign({}, o1, o2, o3, o4); console.log(obj) //{0: 'a', 1: 'b', 2: 'c', a: 2, b: 2, c: 3} const o5 = true; const obj = Object.assign({}, o1, o2, o3, o4, o5); console.log(obj); //{0: 'a', 1: 'b', 2: 'c', a: 2, b: 2, c: 3}复制代码
Object.keys():返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 。
const anObj = { 100: 'a', 2: 'b', 7: 'c' }; console.log(anObj); //{2: 'b', 7: 'c', 100: 'a'} const array = Object.keys(anObj); console.log(array); // ['2', '7', '100']复制代码
Object.values():方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用
for...in
循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。const an_obj = { 100: 'a', 2: 'b', 7: 'c' }; console.log(an_obj); //{2: 'b', 7: 'c', 100: 'a'} const array = Object.values(an_obj); console.log(array); // ['b', 'c', 'a']复制代码
Object.prototype.toString():检测对象类型
Object.prototype.toString.call(new Date); //[object Date]复制代码
Object.prototype.hasOwnProperty(): 对象自身属性中是否具有指定的属性(也就是,是否有指定的键)
o = new Object(); o.hasOwnProperty('prop'); // 返回 false o.prop = 'exists'; o.hasOwnProperty('prop'); // 返回 true delete o.prop; o.hasOwnProperty('prop'); // 返回 false
作者:梵墨
链接:https://juejin.cn/post/7024047960434409480