在Vue.js中,Object.assign(param) 和 Object.assign({}, param) 的主要区别在于目标对象的不同。
Object.assign(param)
当你直接将param作为Object.assign的第一个参数传递时,这意味着param对象自身会被修改,因为它是目标对象。Object.assign会将后续源对象的所有可枚举属性复制到param上,这可能导致原对象param的内容被覆盖或扩展。Object.assign({}, param)
这种情况下,首先创建了一个全新的空对象{}作为目标对象,然后将param对象的所有可枚举属性复制到这个新对象上。这样做不会直接修改param对象本身,而是生成一个新的对象,这个新对象拥有与param相同的属性和值。这种方式通常用来克隆或浅复制param对象。
在Vue.js开发中,特别是当你想要避免污染原始数据或需要一个组件状态的干净副本时,使用 Object.assign({}, param) 更为常见,因为它提供了一个独立于原始数据的新对象,这对于重置状态、合并默认值等场景非常有用。而直接使用 Object.assign(param) 可能会导致意外的数据变更,尤其是在处理响应式数据时需格外谨慎。