堆与栈 | 对象深浅拷贝

Posted hanhaiyuntao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆与栈 | 对象深浅拷贝相关的知识,希望对你有一定的参考价值。

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));

以上是关于堆与栈 | 对象深浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章

Python深浅拷贝

(二十五)python 3 深浅拷贝

java深浅拷贝

java提高(15)---java深浅拷贝

Python的深浅拷贝

js深浅拷贝