这是一个对于Object对象的常用方法进行汇总,都是一个我开发中遇到的使用方法,欢迎大家评论区补充
首先我们创建一个常用的对象用于举例
let object1 = { a: 1, b: 'string1' }
let object2 = { b: 2, c: 'string2' }
1. Object.keys()
返回一个数组,数组包含对象所有可枚举属性名称
// 语法
Object.keys(obj)
// 举例
Object.keys(object1) // [a, b]
Object.keys(object2) // [b, c]
2. Object.values
返回一个数组,数组包含对象所有可枚举的属性value值
- 语法
Object.keys(obj)
- 举例
Object.values(object1) // [1, 'string1']
Object.values(object2) // [2, 'string2']
3. Object.assign()
返回一个对象,可以将多个对象分配给一个对象,一般用来合并对象
- 语法
- 参数:target 目标参数,sources源对象
Object.keys(otarget, ...sourcesj)
- 举例
//克隆了obj1对象
Object.assign({},object1) // { a: 1, b: 'string1' }
//对同名属性b进行了替换
Object.values(object1,object2) // { a: 1, b: 2, c: 'string2' }
//此时object1的值也为{ a: 1, b: 2, c: 'string2' },因为object2的值赋给了object1
console.log(object1) // { a: 1, b: 2, c: 'string2' }
4. Object.entries()
返回一个数组,数组包含对象自身可枚举属性的键值对数
- 语法:
Object.entries(obj)
- 举例
Object.entries(object1) // [[a,1], [b,'string1']]
Object.entries(object2) // [[b,2], [c,'string2']]
5. Object.fromEntries
返回一个对象,一个由键值对列表转换的对象,与Object.entries()
相反
- 语法:
- 参数:iterable类似Array、Map或者其它实现了可迭代协议的可迭代对象
Object.fromEntries(iterable)
- 举例
let arr1 = [[a,1], [b,'string1']]
Object.fromEntries(arr1) // { a: 1, b: 'string1' }
// 与Object.entries()相反
Object.fromEntries(Object.entries(object2)) // { b: 2, c: 'string2' }
6. Object.prototype.hasOwnProperty
返回boolean,判断某个对象自身属性中是否具有指定的属性,只会对自身属性进行判断,继承来的一律返回false
- 语法:
- 参数:iterable类似Array、Map或者其它实现了可迭代协议的可迭代对象
obj.hasOwnProperty(prop)
- 举例
Object.prototype.property1 = 111
object1.hasOwnProperty("a") // true
object1.hasOwnProperty("b") // true
object1.hasOwnProperty("c") // false
object1.hasOwnProperty("property1") // false
object1.hasOwnProperty("toString") // false
7. defineProperty
定义对象属性,可以将对象中某个属性的内部属性进行修改
- 语法:
- 参数:obj是对象名; key是对象中的属性名;{}是这个属性的相关配置,包括value值、writable是否允许修改、enumerable是否允许枚举、configurable是否允许删除
Object.defineProperty(obj, key, {})
- 举例
let object1 = { a: 1, b: 'string1' }
// 给对象新加一个属性
Object.defineProperty(object1, "newData1", {
value: 10,
writable: true, // 是否允许修改
enumerable: true, // 是否允许枚举
configurable: true, // 是否允许删除
});
object1.newData1 // 10
object1 // { a: 1, b: 'string1', newData1: 10 }
8. Object.getOwnPropertyNames()
返回一个数组,数组包含对象全部属性名称(可枚举或不可枚举)
- 语法:
Object.getOwnPropertyNames(obj)
- 举例
let object1 = { a: 1, b: 'string1' }
// 将b变为不可枚举属性
Object.defineProperty(object1, "b", {
enumerable: false,
});
Object.keys(object1) // [a]
Object.getOwnPropertyNames(object1) // [a, b]
9. Object.is
它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致
- 语法:
- 参数:value1和value2是对比的参数
Object.is(value1, value2)
- 举例
Object.is('foo', 'foo') // true
Object.is({}, {}) // false
不同于 === 之处
+0 === -0 //true
NaN === NaN // false
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true