对象方法
创建对象的方法
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注意
对象相比数组是无序的集合,没有那么多增删改查的方法
