码迷,mamicode.com
首页 > 其他好文 > 详细

堆与栈 | 对象深浅拷贝

时间:2019-08-21 13:49:05      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:type   for   eof   深浅拷贝   就是   mil   sha   ejs   one   

JS中的变量类型分为

值类型(基本类型):null undefined boolean string number

引用类型:

array object

在JS中,每一个数据都需要一个内存空间。内存空间又被分为两种,栈内存(stack)与堆内存(heap)

栈内存一般储存基础数据类型

var a = 1

数据在栈内存中的存储与使用方式类似于数据结构中的堆栈数据结构,遵循后进先出的原则。

堆内存一般储存引用数据类型

var b = { xi : 20 }

 

浅拷贝

浅拷贝就是只进行一层拷贝

function shallowClone(source) {

var target = {};
for (var i in source) {
if (source.hasOwnProperty(i)) {
target[i] = source[i];
}
}
return target;
}

深拷贝
无限层级拷贝

json的深拷贝

function cloneJSON(source) {

    return JSON.parse(JSON.stringify(source));

}

 

深拷贝 = 浅拷贝 + 递归  

弊端:对对象中的正则,func等没有做处理

function clone(source) {

    var target = {};

    for(var i in source) {

        if (source.hasOwnProperty(i)) {

            if (typeof source[i] === ‘object‘) {

                target[i] = clone(source[i]); // 注意这里

            } else {

                target[i] = source[i];

            }

        }

    }

 

    return target;

}

 

 

 

function cloneJSON(source) { returnJSON.parse(JSON.stringify(source)); }

堆与栈 | 对象深浅拷贝

标签:type   for   eof   深浅拷贝   就是   mil   sha   ejs   one   

原文地址:https://www.cnblogs.com/hanhaiyuntao/p/11388173.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!