在后台系统iview中使用object.assign进行对象的复制,但是报错了

191 阅读1分钟
  • 工作后台使用object.assign()进行拷贝,把this.formData传过来,但是在传给后端的时候需要转化里面的值,发现报错了,错误信息如下

  • https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/4/28/171bedba77b7c50e~tplv-t2oaga2asx-image.image

  • 原因的代码如下:

    https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/4/28/171bedba87d6f30c~tplv-t2oaga2asx-image.image

  • 在外面有一层时间转成int,里面也有一层时间转成int. - iview中的里面的DatePicker组件要传的是date,但是我传的是int类型,后面发现是我使用了object.assign()进行浅拷贝,里面的内容还是引用原来的,改成$.extend()就不会了,因为他使用的是深拷贝,把你的内容每一层都拷贝过来,就不会出现这个问题。

一、下面是浅拷贝和深拷贝的区别。

  • https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/4/28/171bedba8874c694~tplv-t2oaga2asx-image.image

  • 浅拷贝只是占用同一个内存,但是深拷贝会重新创建个对象,两个对象占用的是不同的内存。

二、 下面是赋值、浅拷贝和深拷贝里面的具体区别。

https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/4/28/171bedba8d18ee1e~tplv-t2oaga2asx-image.image

  • 1、 浅拷贝的方法有:Object.assign()Array.prototype.concat()Array.prototype.slice()

  • 2、 深拷贝的方法有:JSON.parse(JSON.stringify())$.extend()、lodash库中的cloneDeep方法,或者自己手写深拷贝代码。

  • 以上,thanks.