修改JS数组中的一个元素的属性值,其他元素的该属性值跟着变了的问题

<body>
	<script type="text/javascript">
	//公用的新题目对象。 问题点1
	var newSubject = {
		content:''
	}
	//题目集合
	var subjectList = [];
    //刚进入页面时默认有一个新题目
    subjectList.push(newSubject);
    //然后编辑这个题目
    subjectList[0].content = 'X';
    //再添加一个新题目
    subjectList.push(newSubject)
    //再编辑第二个题目
    for (var i in subjectList) {
    	if (i == 1) {
    		var subject = subjectList[i];
    		subject.content = 'Y'; //问题点2
    	}
    }
    //输出整个题目集合,发现第一个题目也被编辑了
    console.log('subjectList=');
    console.log(subjectList);
    //原因:数组是引用类型,数组变量存储在栈,元素数据存储在堆中,将数组赋值不同的对象,所有的赋值对象都指向堆同一个数据,所以改变其中一个数组中的元素,别的数组元素也会改变。
    //解决:先把数组转换成字符串再转换成对象 ,这样会新分配一块内存,就不会指向同一个堆中的数据。例子1: var tmp = JSON.parse(JSON.stringify(array));
    //本例中的subjectList.push(newSubject)应该改为subjectList.push(JSON.parse(JSON.stringify(newSubject)))
	</script>
</body>

不过使用JSON.parse(JSON.stringify(array))时有注意事项

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值