- 首先對象屬性和方法的簡寫方法鞠柄。
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"}
可以看到目標函數(shù)同樣的也被更改了懂盐。所以說我們在使用Object.assig()方法的時候要注意到這樣的一個問題褥赊。
說到深淺拷貝除去Object.assign()方法進行深淺拷貝以外還有我們常用的JSON.stringify以及JSON.parse來進行深淺拷貝的。(同樣我們在使用該方法的時候莉恼,如果對象內(nèi)部存在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: ?}
當然還有遞歸的方法進行拷貝俐银,不過遞歸這個東西我還是要琢磨琢磨的尿背。太讓人禿然了。