最近在翻看源码时,发现对一些js的内置对象的方法还不够了解,所以对内置对象的方法做一个汇总
Object.create()
创建一个对象
-
常规语法
const obj = Object.create(proto,[propertiesObject]) -
参数
-
proto:为需要创建的对象提供原型属性的对象,即对象的原型对象
-
propertiesObject: (可选)
- 传入一个对象
- 对象的属性参照Object.defineProperties的第二个参数
- 若参数不为 undefined,会传入对象自身的可枚举属性
-
-
返回值
返回一个新对象,带有指定的原型对象和属性
-
例子
首先定义一个原型对象person,然后通过create方法来创建otherPerson这个对象
const person = { name: '小明', age: 22, sex: 'man' } const otherPerson = Object.create(person) console.log(otherPerson)输出结果:
可以看到在执行方法后创建了一个otherPerson这个对象,在这个对象的原型上,则继承了person对象的属性
可以通过otherPerson.name直接获取原型上的name属性的值。在修改name属性是,会默认为otherPerson新增一个name属性,并没有修改其原型属性的值
需要通过proto这个属性去访问原型中的属性,并修改属性的值
Object.assign()
用于合并对象(只能合并对象中可枚举的属性),或者复制对象
-
常规语法
Object.assign(target, source); -
参数
- target:目标对象
- source:源对象
-
返回值
返回合并之后的目标对象
-
例子
const target = { a: 1, b: 2, c: 5 } const source = { c: 3, d: 4, } Object.defineProperty(source, 'e', { value: 6, enumerable: false }) console.log(source) console.log(Object.assign(target, source))输出结果:
可以看到,在执行方法后将源对象中的属性合并到了目标对象中,其中源对象会将目标对象中的相同属性覆盖。如果源对象中存在不可枚举的属性,这个属性无法被合并到目标对象中。
如果要复制一个对象,可以将源对象合并到一个空对象中
const copy = { name: 'aaa', like: { color: 'red' } } const cur = Object.assign({}, copy) console.log(cur)执行结果为
但是,当我们去改变源对象中的like属性时,会发现
复制过来的目标对象中的like属性也会随之发生变化,这说明如果源对象的属性中存在对象,Object.assign()只是将其引用拷贝到目标对象中
Object.keys()
主要是获取传入对象的可枚举属性,将其组成数组返回
-
常规语法
Object.keys(obj) -
参数
- obj:要获取可枚举属性的对象
-
返回值
带有可枚举属性组成的字符串数组
-
例子
const obj = { a: 1, b: 2, c: 3 } const arr = ['a', 'b', 'c', 'd'] Object.defineProperty(obj, 'd', { value: 4, enumerable: false }) console.log(Object.keys(obj)) console.log(Object.keys(arr))执行结果:
可以看到对象输出了对象中的可枚举属性,数组则返回了其索引值
Object.values()
用于获取目标对象可枚举属性的值
-
常规语法
Object.values(obj) -
参数
- obj:目标对象
-
返回值
一个包含对象自身的所有可枚举属性值的数组
-
例子
const obj = { a: 1, b: 2, c: 3 } Object.defineProperty(obj, 'd', { value: 4, enumerable: false }) console.log(Object.values(obj))执行结果:
Object.entries()
用于获取一个对象中可枚举属性的键值对
-
常规语法
Object.entries(obj) -
参数
要获取键值对的数组
-
返回值
键值对数组
-
例子
const obj = { a: 1, b: 2, c: 3 } Object.defineProperty(obj, 'd', { value: 4, enumerable: false }) console.log(Object.entries(obj))输出结果