- 首先对象属性和方法的简写方法。
let foo = '2020/01/01'
const bar = {
name: '张三',
//此处等于foo: foo
foo,
helloworld () {
console.log('hello', this.name)
}
}
- Object.assign()
Object.assign方法用于对象的合并。当对象只有一层属性时候,此方法可以完成深拷贝;当对象有对象的时候,此方法则为浅拷贝。
let foo = {
a: '1',
b: '2'
}
let bar = {
c: '3',
d: '4'
}
const obj = Object.assign(foo,bar)
console.log(obj) //{a: "1", b: "2", c: "3", d: "4"}
console.log(foo) //{a: "1", b: "2", c: "3", d: "4"}
console.log(bar) //{c: "3", d: "4"}
可以看到目标函数同样的也被更改了。所以说我们在使用Object.assig()方法的时候要注意到这样的一个问题。
说到深浅拷贝除去Object.assign()方法进行深浅拷贝以外还有我们常用的JSON.stringify以及JSON.parse来进行深浅拷贝的。(同样我们在使用该方法的时候,如果对象内部存在function以及RegExp的时候是没有办法拷贝的)
const obj = JSON.stringify(bar)
const newObj = JSON.parse(obj)
console.log(newObj)
//{c: "3", d: "4", e: {…}}
c: "3"
d: "4"
e:
f: "5"
g: "6"
除去上面的方法的话还可以使用lodash进行拷贝,前提需要引入lodash的JS文件。
let result = _.cloneDeep(bar)
console.log(result)
// c: "3"
// d: "4"
// e: {f: "5", g: "6"}
// h: {i: ƒ}
当然还有递归的方法进行拷贝,不过递归这个东西我还是要琢磨琢磨的。太让人秃然了。