JS对象之间的赋值

本文介绍了在编程中对象赋值的几种常见方式,包括使用Object.keys遍历赋值、for循环赋值、Object.assign实现浅复制及解构赋值等,并讨论了不同方法的特点。

在写代码过程中,经常遇到对象赋值的情况。此文章记录一下对象之间赋值的几种方式。

一:给对象中的相同属性赋值

Object.keys获取所有对象的key再遍历赋值

	obj = {
		age : 18,
		sex : '男'
	}
	obj1 = {
		age : '',
		sex : ''
	}
  Object.keys(obj1).forEach(key=>{obj1[key]=obj[key]})

通过for循环进行赋值

obj = {
		age : 18,
		sex : '男'
	}
	obj1 = {
		age : '',
		sex : ''
	}
	
for(let k in obj){
	this.obj[k] = obj1[k];
}

浅复制Object.assign

注意:如果两个对象属性不一样,源对象多余的属性也会被复制到obj目标对象中

obj = {
		age : 18,
		sex : '男'
	}
	obj1 = {
		age : '',
		sex : ''
}

Object.assign(obj,obj1);

解构赋值

剔除差异属性:假设targetObj有a、b、c、d四个属性,originObj有a、b、c三个属性

let {d, ...targetObj} = originObj
### JavaScript对象无法正确赋值数组的原因及解决方案 在 JavaScript 中,当尝试通过对象属性来存储或操作数组时,可能会遇到一些意外行为。这通常是因为对引用类型的特性理解不足所致。 #### 1. **原因分析** JavaScript 的数组是一种引用类型的数据结构。这意味着当你将一个数组赋值给某个对象的属性时,实际上只是复制了该数组的内存地址而非其实际内容[^1]。因此,在后续修改此数组的过程中,任何对该数组的操作都会反映到所有指向它的变量上。如果未注意到这一点,则可能导致意料之外的结果。 例如: ```javascript let array = [1, 2, 3]; let obj = {}; obj.arrayProperty = array; array.push(4); console.log(obj.arrayProperty); // 输出 [1, 2, 3, 4] ``` 上述代码展示了如何由于共享同一份底层数据而导致问题的发生。这里 `obj.arrayProperty` 和全局范围内的 `array` 实际上是指向同一个地方的内容,所以改变其中一个会直接影响另一个[^3]。 #### 2. **解决方案** 为了防止这种副作用,可以采用深拷贝技术创建独立副本: ##### 方法一:使用扩展运算符 (`...`) 这是最简单的方式之一,适用于浅层嵌套的对象或者简单的数组情况。 ```javascript let newArray = [...originalArray]; ``` 这种方法仅能实现一层深度上的克隆,对于更复杂的多层次结构则需要额外考虑。 ##### 方法二:利用 JSON 序列化与反序列化 虽然这不是推荐的最佳实践(因为某些特殊类型如 Date 或 Function 不会被保留),但对于纯基本类型组成的数组来说非常有效。 ```javascript let clonedArray = JSON.parse(JSON.stringify(originalArray)); ``` ##### 方法三:借助第三方库比如 Lodash 提供的功能 Lodash 是一款流行的工具集,其中包含了专门用来做深层复制的方法 _.cloneDeep() ,它可以很好地应对各种复杂情形下的需求。 ```javascript const _ = require('lodash'); let deepClonedArray = _.cloneDeep(originalArray); ``` 以上三种方法都可以帮助开发者避免直接操纵原始数据源带来的风险,从而达到安全可靠的目的。 #### 3. **注意事项** 即使采取了预防措施之后,在设计程序逻辑时仍需保持警惕心,确保每次交互都是基于预期的行为模式之上。另外值得注意的是,不同的浏览器环境之间可能存在细微差异,所以在部署前务必进行全面测试验证[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值