对象的新增方法

90 阅读3分钟

1.bject.is()

该方法是ES6主要用来解决ES5比较两个值是否相等中不缜密的问题,因为在ES5中的=====都会将前者自动转换数据类型。使得展示出-0=+0以及NaN不等于自身。而这就需要一个只要两个值是一样的,那么他们就相等的方法。此时的Object.is()就解决了这个问题。该方法与严格模式下===行为基本一致。

image.png

2.Object.assgin()

该方法的主要作用是用来合并两个数组对象,接收多个参数,第一个是是目标对象,后面的是源对象,会将源对象中的所有可枚举属性拷贝到目标对象中。而如果其中有相同的属性名,则后者会替换前者。若参数不为对象,则会先转换再操作。

image.png

该方法为浅拷贝,即拷贝过来的是一个对象的话,那么拷贝值为原对象的引用,任何一方发生改变都会映射到另一方。

image.png

方法也可以处理数组,但是同样的,会将其转化成对象使用。

image.png

比较好用的是可以用该方法为属性指定默认值。

image.png

若目标对象有该属性,则属性值不变,若没有该属性,则属性值为默认值。

3.Object.getOwnPropertyDescriptors()

该方法会返回某个对象所有自身属性的描述对象

image.png

相较于Object.getOwnPropertyDescriptor(),他能返回多个属性的描述对象。该方法的主要作用是为了解决Object.assign()无法正确拷贝getset属性的问题。

image.png

此时的value值为undefined。因为Object.assgin()只会拷贝其值,而不会拷贝赋值方法或者取值方法。利用Object.defineProperties()方法与之结合可以解决这个问题。

image.png

4.__porto__属性,Object.setPrototypeOf()Object.getPrototypeOf()

__porto__属性的作用是用来读取或者设置当前对象的原型对象,但是由于其是一个内部属性,所以建议少使用该方法,而使用Object.setPrototypeOf()(写操作),Object.getPrototypeOf()(读操作)和Object.creat()(生成操作)来代替。

4.1 Object.setPrototypeOf()

其作用与__porto__一样,用来设置一个对象的原型对象,返回参数对象本身。其格式为Object.setPrototypeOf(object,prototype)

image.png

x设为y的原型,y可以读取x的属性。若参数不是对象,则会转换成对象,由于undefinednull不能转换,所以如果这俩是第一个参数,就会报错。

4.2 Object.getPrototypeOf()

该方法与Object.setPrototypeOf()配套使用,用户读取一个对象的原型,使用格式为Object.getPrototypeOf(obj)。同样的,参数若不为对象,则会转换成对象。遇到undefinednull也同样会报错。

5.Object.keys()Object.values()Object.entries()

这三个方法作用于对象,返回值均为一个数组,分别返回该数组的key值、value值和键值对。

5.1:Object.keys()

该方法返回该对象仅自身可遍历属性的键值。

image.png

5.2:Object.values()

该方法返回一个数组,包含被遍历对象中所有可遍历属性的键值(不包含继承属性)。若目标对象是一个字符串,则会返回该字符串各个字符组成的数组。若不是对象,则会先转换成对象。

image.png

5.3:Object.entries()

该方法返回一个数组,该数组包含参数对象中所有可遍历属性的键值对数组(不含继承属性)。

image.png

6.:Object.fromEntries()

该方法是Object.entries()的逆操作,用于将键值对数组转化为对象,因此很适合将Map结构转换为对象结构。

image.png

该方法可配合URLSearchParams对象,将查询字符串转换为对象。

image.png