js中引用类型赋值(拷贝)问题
问题来源
在js中,引用类型的变量引用的只是内存的地址信息,所以在用其给其他变量赋值时,另一个变量得到的是该内存地址,不是内存中的内容,所以在另一个变量改变某个值的时候会反映在原始变量中。
例如:
var test={name:'jack',age:'23',
}
var test1=test
test1.name='rose'
console.log(test.name) //rose
console.log(test1.name) //rose
解决方法:
如果是数组:
最简单的方法就是:
var aArr = [0,1,2,3];
var m = aArr.slice(0);通用的:对数组、对象都适用的(其实就是循环遍历重新建一个):
function clone(obj) { var o; if (typeof obj == "object") { if (obj === null) { o = null; } else { if (obj instanceof Array) { o = []; for (var i = 0, len = obj.length; i < len; i++) { o.push(clone(obj[i])); } } else { o = {}; for (var j in obj) { o[j] = clone(obj[j]); } } } } else { o = obj; } return o; }
节点克隆:
var p = document.getElementsByTagName("p")[0];
var cP = p.cloneNode();//克隆p节点
var cP = p.cloneNode(true);//克隆p节点,深度克隆,克隆节点以及节点下面的子内容。
js中引用类型赋值(拷贝)问题相关推荐
- js中变量赋值3e3的含义简介
js中变量赋值3e3的含义简介 3e3 3e3 getNewTimer = setTimeout(function () {get_new_sign_list()}, 3e3) 其中3e3含义 3e3 ...
- 一文搞懂JS中的赋值·浅拷贝·深拷贝
前言 为什么写拷贝这篇文章?同事有一天提到了拷贝,他说赋值就是一种浅拷贝方式,另一个同事说赋值和浅拷贝并不相同.我也有些疑惑,于是我去MDN搜一下拷贝相关内容,发现并没有关于拷贝的实质概念,没有办法只 ...
- js中的数组拷贝(浅拷贝,深拷贝)
问题 今天写代码时需要拷贝一个内容会变化的数组,使用了=赋值,slice(),concat()方法都不行,修改了原数组后拷贝数组也变了,原因是这个数组内容是object,而object是引用类型,需要 ...
- JS中对象赋值只传值不传对象(地址)的方法,改变新值不影响旧值的两种方法...
方法一 利用JSON.parse()和JSON.stringify() 对对象进行深层拷贝 var data={a:1,b:2,c:3,d:4};var newData=JSON.parse(JSON ...
- js中src赋值理解
不用Jquery时:document.getElementById("imageId").src = "xxxx.jpg"; 用Jquery时:$(" ...
- 详细讲解js中的深拷贝与浅拷贝
1 概述 深拷贝与浅拷贝在其它语言中也经常被提及到,在实际项目开发过程中也常常需要区分当前使用的到底是深拷贝还是浅拷贝,有时候在该使用深拷贝的地方,我们使用了浅拷贝,会导致深藏不露的bug. 2 数据 ...
- JS中的深拷贝与浅拷贝
刚看完JS中的深浅拷贝,来记录分享一番,一起来开心的掉发吧. 首先了解深浅拷贝之前来看看JS中的几种数据类型,分别有String.Number.Boolean.undefined.null.Objec ...
- js 浅拷贝直接赋值_JS中实现浅拷贝和深拷贝的代码详解
(一)JS中基本类型和引用类型 JavaScript的变量中包含两种类型的值:基本类型值 和 引用类型值,在内存中的表现形式在于:前者是存储在栈中的一些简单的数据段,后者则是保存在堆内存中的一个对象. ...
- JS 中对象的深浅拷贝(ES3、ES5、ES6不同方法底层实现,一文搞清楚深浅拷贝面试常问题)
JS 中对象的深浅拷贝 拷贝我们都知道这个词的意思,我们经常做过复制.粘贴的操作,其中的复制就是拷贝,那么在拷贝的时候,如果我们复制出来的内容和原内容是完全的分开,各自不相影响,那么这就属于深拷贝 ...
最新文章
- jumpserver 使用教程_jumpserver安装及使用教程
- 设计模式入门之原型模式Prototype
- 1003 我要通过
- 双向链表逆置c语言,【C++】实现双向链表的所有操作,包括逆置双链表(三种方法)...
- vim命令模式和底线_人生苦短!老鸟带你用Vim偷懒!
- NumPy Essentials 带注释源码 二、NumPy 数组对象
- html5鼠标载入弹出信息框,js实现自定义弹出对话框(弹窗)可拖拽
- MySql中PreparedStatement对象与Statement对象
- c语言 学生成绩管理系统
- 【房价预测】BP神经网络回归的现实应用-上海市二手房价格影响因素分析——思路剖析和结果分享
- 理解Mach-O文件格式(1)
- Python入门_打印矩形
- 逆向webpack打包,还原出原始文件。
- 一些高阶矩的介绍,峰度和偏度
- Linux下安装mysql完整教程
- 【ps】ps如何画直折线
- 什么叫 Rss 订阅
- 2018 iPad pro 11停用,DFU模式刷机指南
- RabbitMQ 学习知识点总结
- winfrom 操作Excel