一
let a = {id :1}
let b = {...a}
console.log(b) // {id:1}
a == b // false
二
let arr = [1,2,3]
let arr2 = [...arr]
arr == arr2 // false
三
let oldArr = [ { id : 1 } ]
let newArr = [...oldArr ]
oldArr == newArr // false
oldArr[0] == newArr[0] // true
可以看到,对于引用类型,扩散可以改变外层的引用类型的地址,但里面的引用类型并没有改变。所以这里的oldArr == newArr 返回的false,oldArr[0]和newArr[0]的比较结果却是true。
在vue项目中,要把table里的数据导出到excle表格里。
我这里用扩展运算符拷贝了data里的数据。数据格式是一个对象数组,然后在导出excel表的时候,内容做了格式化,结果data里的数据也跟着改变了,所以只要我一导出数据,页面的内容就乱了。
然后这里就重新搭配map来拷贝。
let NewtableData = this.tableData.map(item => {return {...item}});
三 +
let oldArr = [ { id : 1 } ]
let newArr = oldArr.map(item=>{return {...item}})
oldArr // [{id:1}]
newArr // [{id:1}]
oldArr == newArr // false
oldArr[0] == newArr[0] //false
四
如果还是不行的话, 那就老老实实去深拷贝吧。
lodash的函数库里有。
https://www.lodashjs.com/docs/lodash.clone