Skip to content

对象方法

创建对象的方法

shell
{}                                               字面量
实例化构造函数/实例化 class
new Proxy(                                     创建代理对象
Object.create(obj)                               创建空对象,obj 在空对象的原型对象 Prototype

增加属性/值

shell
obj.当前不存在的属性/obj[当前不存在的属性]              赋值
...                                               拓展运算符(此法是浅拷贝,深层共享引用)
Object.assign()                                   左侧为基合并(此法是浅拷贝,深层共享引用)
Object.defineProperty(obj, '当前不存在的属性', {value: 'John'})

删除属性

shell
delete obj.属性                                  此法改变原对象
const { b, ...newObj } = obj;                   解构出新对象(此法是浅拷贝,深层共享引用)

修改属性/值

shell
obj.当前已存在的属性/obj[当前已存在的属性]            赋值
Object.assign()                                  左侧为基合并(此法是浅拷贝,深层共享引用)
...                                              拓展运算符(此法是浅拷贝,深层共享引用)
Object.defineProperty(obj, '当前已存在的属性', {value: 'John'})

查询属性/值

shell
obj.当前已存在的属性/obj[当前已存在的属性]                值,获取属性值
Object.getOwnPropertyDescriptor()                    获取属性描述符:值、可写、可枚举、可配置(删除修改)
属性名 in obj                                         属性名,判断对象本身或其原型对象上是否存在某属性
obj.hasOwnProperty(属性名)                            属性名,只判断对象本身是否存在某属性

遍历属性/值的方法(五个)

shell
Object.entries(obj).forEach()                            键值对数组,遍历对象自身可枚举的属性名和属性值,不包括原型
Object.keys(obj).forEach()                               键名,遍历对象自身可枚举的属性名,不包括原型
Object.values(obj).forEach()                             键值,遍历对象自身可枚举的属性值,不包括原型
Object.getOwnPropertyNames(obj).forEach()                键名,遍历对象所有属性,包括原型
for...in                                                 直接遍历对象及其原型链上的可枚举属性

其他方法

shell
Object.freeze()                  冻结对象,使其不可修改
Object.seal()                    防止添加新属性,但允许修改现有属性
Object.fromEntries()             将键值对列表转换为对象,Object.entries(obj)的反转
Object.is()                      === 判断的拓展,可判断 Object.is(NaN, NaN) true,Object.is(+0, -0) false

注意

对象相比数组是无序的集合,没有那么多增删改查的方法