手写JS之深浅拷贝

前语

作为前端开发人员,当咱们在进行项目开发统筹的过程中,关于从后端传输过来的JavaScript数据,咱们常常会对此进行方针拷贝数组拷贝等数据操作,由于这有助于之后的数据对等到程序员是学什么专业恢复数据。像这样面试毛遂自荐类似于拷贝JS数据的这种操作行为在JS中统称为程序员是做什么的深浅仿json怎样读。近期的春招面试开面试毛遂自荐简略大方端了,想必大量的面试javascript:void(0)官会查询这个根柢的知识点,你对这个知识点是否有清楚的了解呢?或许咱们常常进行数据拷贝,可是或许疏忽了不和的原理,深拷贝和浅拷贝的差异又是什么呢?让咱们一起来一探究竟吧!

手写JS之深浅拷贝

数据类型

javascript数据类型般来说,遇到深浅拷贝的问题,本质上都是针对引证数据类型的变量操作。假定要深前端结构化了解这个论题,就不得不对JS的数据类型有所了解。咱们都知道JavaScript中的数据一般分为两种,根柢数据类型引证数据类型

其间:

- 根柢数据类型: Number、Strin程序员装逼代码g、Null、前端开发需求把握什么技术Undefined、Boolean、Sjavascript:void(0)ymb面试问题ol
- 引证数据类型: obj,array前端结构,function...

手写JS之深浅拷贝
什么是json怎样读面试问题用数据类型,什么程序员那么心爱又是根柢数据类型呢?这就要广泛一下前端学什么JS的内存机制了

手写JS之深浅拷贝

JS中,每一个数据都需求一个内存空间。内存空间又面试被分为两javascript种,栈(stac前端和后端的差异k)堆(heap)

  • 栈:由体系主动分配,主动收回,功率高,但容量小。
  • 堆:由程序员手动分配内存,而且手动销毁,功率不如栈,但容量大。

其实很简略,根柢类型便是保存前端开发在栈中的javascript:void(0)简略数据段,而程序员训练班要多少钱程序jsonp跨域原理员需求什么学历用类型指的是保存在堆中的方针。JS中的根柢数据类型一般是存储栈中,这是由于这些根柢类型在内存中占有巨细固json解析的空间,即值的巨细必定,所以这些具体的值往往保存在栈空间(javascript九九乘json法表闭包在外),咱们能够直接操作保存在栈的值,如字面意思,这种拜访办法为按值拜访。

手写JS之深浅拷贝

而引证类型的值巨细不固定,可是,他们的地址巨细是固定的,所面试技巧以,为了存储这个类型,前端和后端哪个工资高体系将能够拜访这个类前端结构型的地址存储在栈中,并json转map给这个变量的自json转map身进行赋值,并将其具体的内容存入堆中。引证数据的拜访办法类似于指针jsonp经过栈中拜访方针的地址,并依照这个地址在堆中找到方针具体的内容。

看到这儿json是什么意思你是否会有些了解呢?之所以会有深浅拷贝的概念,是面试常见问题及答复技巧面试技巧程序员那么心爱于JS对根柢类型和引javascript什么意思用类型的处理办法不程序员是做什么的同。咱们能够直接在栈内存中拜访数据类型,即直jsonp跨域原理接操作内存空间,按值拜访。可是关于引面试问题用数据,JS不允许咱们像前者那样直接拜访,看似在操作方针,其实咱们只是在操作方针的引证算了。拷贝也是相前端同如此,假定咱们要拷贝一个根柢的数据类型的值,由所以简略的数据,我前端学什么们直接在栈内存中拓荒相同大前端和后端哪个工资高小的空间程序员那么心爱,并将其保存在新的变量上去,这样,值与值之间是独立存在,且批改一个变量不会影响其他的变量。可是关于引证类型的拷贝,咱们拷贝json文件是干什么的的值就不再是引证内容的值,而是指向该方针的指针。两个指针指向相同的jav程序员怎样学ascriJSONpt九九乘法表内存空间,假定操作拷贝出来的政程序员薪酬一般多前端工程师策,就会对源方针和源数据产生影响。

var obj1={
name:'莹莹'
}程序员那么心爱
var obj面试自告奋程序员装逼代码勇3分钟通用2=obJavaScriptj1;
obj2.name='茵茵';
console.lo程序员需求什么学历g('obj1.n前端训练安排amejavascript基础入门',obj1.json转mapname); // '茵茵'
console.log('obj2.name',obj2.name); // '茵茵'

程序员是做什么的上为一个简略的栗子。

浅拷贝

什么是浅拷贝?

讲完了数据类型的差异,总算能够来介绍拷贝办法了面试毛遂自荐一分钟,浅拷贝其实便是拷贝指向方针的指针,在百度百科中,有这前端样的介绍:

拷贝面试毛遂自荐3分钟通用出来的方针方针的指针和源方针面试毛遂自荐范文的指针指向的内存空间是同一块空间,浅拷贝只是一种简略的拷贝,让几个方针面试自程序员客栈告奋勇简略大方共用一个内存,可是当内存销程序员毁的时json怎样读分,指向这个内存空间的悉数指针需求从头界说,否则会构成野指针差错。

可见,浅拷贝只是拷贝根柢类型的数据或许指向某个方针的指针,而不是拷贝整个方针,假定批改方针方针,那么,源方针会有被批改的或许

浅拷贝的结束办法

以下是结束浅拷贝的几种常见办法

  • Object.a面试技巧ssign(javascript)
v面试毛遂自荐3分钟通用ar ojsojsonpnpbj = { a: {a: "前端训练安排www", b: 39} };
var initalObj =
Object.ass面试问题ign({}javascript面试题, obj);
in前端开发需肄业什么italObj.a.a = "yyy";
console.log(obj程序员计算器.a.a);
//yyy

手写JS之深浅拷贝

json怎样读心: 有一个特殊情况,当object只需json怎样读单层特征的时分,是深拷贝程序员是做什么的

let前端前端训练安排开发 obj = {
username: 'www'javascript基础入门json解析
};
let obj2 = O前端训练安排bject.assign({},obj);程序员怎样学
obj2.usernj程序员需要什么学历son怎样读ame = 'yyy';
cojson转mapnsole.log(obj); //{username: "www程序员训练班要多少钱"}

手写JS之深浅拷贝

  • Array.prototype.面试毛遂自荐范文concat()
let arr = [1, 3, {    username: 'JSONwwwjson格局'javascript九九乘法表    }];
let arr2=arr.concat();
a面试问题大全及答案大全rr2[2].username = 'yyy';
console.log(arr);

手写JS之深浅拷贝

  • Array.pJSONrototype.slice()
let arr = [1, 3, {    usernamejavas面试cript菜鸟教程: ' www'    }];
let arr3 = arr.slice();
arr3[2].username = 'yyy'
console.log(arr);

手写JS之深浅拷贝

深拷贝

什么是深拷贝?

假定说浅程序员是学什么专业拷贝无法满意完美前端和后端哪个薪酬高主义javascript数据类型开发者的需求,那么,其实,深拷贝才调结束真实意义上的拷贝!和浅拷贝只拷贝方针指针不同,深拷贝会其他创jsonpJavaScript跨域原理造一个一模面试毛遂自荐简略大方相同的方针javasc面试毛遂自荐一分钟ript基础入门,新方针和源方针不会彼此干扰前端开发需要掌握什么技术,批改新方针不会影响源方针。

深拷贝的结束办法

现在深拷贝的结束办法主要有递归拷贝JSON正反序列化

  • JSON.parse()面试毛遂自荐简略大方 和 JSON.stringify()
let obj = {
name: 'yyy',
age: 20,
friend: {
nam前端e: 'll面试l',
age: 19
}
};
let copyObj = JSON.parse(JSON.s面试毛遂自荐简略大方tringify(obj));
obj.jav前端开发ascript数据类型name = 'aaa';
obj.friend.name = 'bbb';
conso前端le.log(obj);
console.log(cojavascript是干什么的pyObj);
  • 递归

json格局怎样翻开特征悉数引证值进行遍历,直到是根柢类型的值中止

function deepCopy(程序员那么心爱obj) {
if (!obj && typeof obj !== 'object'json格局怎样翻开) {
throw new Error程序员客栈('error arguments');
}
/jjson格局avascript基础入门/ const targetObj = obj.constructor === Array ? []面试 : {};
const targetObj程序员装逼代码 = Ar前端ray.isA面试技巧和注意事项rray(obj) ? [] : {};
for前端和后端的差异 (let key in obj) {
//只对方针自有特征进行拷贝
if (obj.hasOwnProperty(key)) {
if (obj[面试技巧和注意事项key] && typeof ojson转mapbj[key] === 'object') {
targetObj[k面试常见问题及答复技巧ey] = deepCjsonp跨域原理ojsonppyjavascrjavascript基础入门ipt什么意思(obj[kjavascript是干什么的ey]);
} els面试常见问题及答复技巧e {
targe程序员那前端开发需要掌握什么技术么心爱tObj[key] = obj[key];
}
}面试技巧和注意事项
}
return targejson文件是干什么的tObj;
}

手写JS之深浅拷贝

参看文章

www.cnblogs.com/secretAngel…

wjson怎样读ww.imjsonp跨域原理oojavascript基础入门c.前端com/artijson文件是干什么的cjavas面试毛遂自荐范文cript面试题le/277…

总结

javascript数据类型管拷贝在JS中是一个挺常用的操作,可是仍是需求常常温习的,假javascrjavascript高档程序设计ipt高档程序设计如文章有不对的地json方也欢迎在谈论中指出,谢谢您的阅览!

手写JS之深浅拷贝