对象的新增方法
Object.is(obj1, obj2)
:同值相等,与严格相等运算符基本一致,但有以下区别:- 可以判断NaN是相等的
- +0 和 -0是不相等的
Object.assign(source, target1, target2, ...)
:用于对象的合并,将源对象自身的、可枚举的属性复制到目标对象- 注意:
- 多个target中,若有多个同名属性,后面的会覆盖前面的
- 当只有一个参数时,会直接返回该参数对象(的引用)
- 当仅有一个参数时,该参数必须可转为(包装)对象,此时null/undefined会报错;当有多个参数,且null/undefined不在第一个,会自动忽略,不会报错
- 该函数是一个浅拷贝函数
- 参数为数组/字符串时,会拷贝成索引:值的对象形式
- 当对象中有取值属性函数get时,会计算完成后再返回该属性
- 运用场景:
- 替换同名属性,后面的会覆盖前面的,比如给对象某个属性重新赋值
- 为对象添加属性
- 为属性添加默认值,该值须在对象的前面
- 为对象添加实例上的方法🍧
- 克隆对象,若想克隆对象的继承属性,源对象可使用对象的原型进行创建一个对象source:Object.create(Object.getPrototypeOf(obj))
- 合并多个对象
- 注意:
- 对象的原型及其方法:
__proto__
属性:内部属性,浏览器环境必须有的属性(非浏览器环境可能没有),尽量不要使用该属性来读取- 调用的是
Object.prototype.__proto__
- 若一个对象本身设置了该属性,则该属性即对象的原型
- 调用的是
Object.setPrototypeOf(obj, proto)
:设置对象原型,返回obj本身- 若obj非对象,会自动转为包装对象(null、undefined会报错),但由于返回本身,不会有任何效果
Object.getPrototypeOf(obj)
:获取对象原型- 若obj非对象,会自动转为包装对象(null、undefined会报错),比如obj:1,则返回Number.prototype
- 对象的键-值获取:三种方法均返回参数自身的、可枚举的、非Symbol的值组成的数组,可供for...of进行遍历
Object.keys(arr)
:返回对象键名组成的数组Object.values(arr)
:返回对象键值组成的数组,键值的顺序参照:先遍历数值键(数值升序)、遍历字符串键(加入时间升序)、遍历symbol键(加入时间升序)- 当用
Object.create(obj, propertyDescripters)
创建对象时,后面的属性描述对象中,每个属性必须显式说明可枚举性,否则默认为不可枚举
- 当用
Object.entries
:返回对象的[key, value]
组成的数组,用途有:- 将对象转为真正的Map结构:
new Map(Object.entries(obj))
- 将对象转为真正的Map结构:
Object.fromEntries(arr | map)
:将一个键值对数组转为对象(3的逆操作),用途有:- 将Map结构转为对象形式
- 和URLSearchParams一起使用,将查询字符串转为对象:
Object.fromEntries(new URLSearchParams('foo=bar&baz=qux'))
javascript
// 🍧为对象添加方法
Object.assign(SomeClass.prototype, {
method1 () {},
method2 () {}
})
1
2
3
4
5
2
3
4
5