当前位置:首页 > Web开发 > 正文

b:{}}不一样了 js object类型转换 内存泄漏 垃圾回收机制

2024-03-31 Web开发

-------------------------------------------------------------*************

- object 变量名存储在栈里面,存储的是引用地点 ,指向堆里面的东西内容数据;

- 内存泄漏

  + 产生条件:新东西不停创建,旧东西却不断根;

为了制止内存泄漏,有垃圾及回收机制

- 垃圾回收机制(gc)

  + 当东西的引用地点在栈中没有引用时,内存占比过高,垃圾回收车会将其断根。

  (前提:内存占比过高,object=null;如果引用东西的变量不全设为null不断根,全设为null不再引用了才有可能被断根去;这个垃圾回收车不确按时间来。)

eg: 

  1、object东西同字符串之间的转换(包孕   JSON字符串)

   var obj={a:1};

        console.log(String(obj));//[object Object] 所有的东西转换为字符串就会酿成这样

        console.log(JSON.stringify(obj));//{"a":1} 将object东西转换为字符串(JSON字符串)

        console.log(JSON.parse(‘{"a":1}‘));//将JSON字符串转换为东西

  2、object东西,键(key)-属性名;值(value)-属性值;键值对

     栈 堆 

   var obj1=JSON.parse(JSON.stringify(obj)); //将obj东西转换成字符串再转换成东西从头赋值给obj2,这时所指向的堆区域差别了即引用地点差别了

        console.log(obj,obj1); //{a: 10} {a: 1}功效不一样了,说明指向差此外两个堆区域

        console.log(JSON.stringify(obj),JSON.stringify(obj1)); //{"a":10} {"a":1}

        console.log(obj1===obj); //false

 

            变量名存储的是引用地点

            var obj2=obj;//将引用地点赋值给obj2

            obj.a=10;

            console.log(obj2.a);//10 功效一样,说明存储的引用地点一样


            存在栈中,改削的是值

            var num=3;

            var num1=num;

            num=10;

            console.log(num1);//3 num1没有再继续转变



            存在堆中,改削引用地点值的内容,地点不会产生转变

            

    //  存在堆中,改削引用地点值的内容,,地点不会产生转变

            // var obj1=JSON.parse(JSON.stringify(obj));

            // console.log(obj1===obj);//这俩必定引用地点不一样

            var obj2=obj;//将引用地点赋值给obj2

            console.log(obj2===obj);//true

            obj.a=50; //只转变引用地点值的内容

            console.log(obj2===obj);//true 这俩引用地点还是一样吧

            console.log(obj,obj2); //{a: 50} {a: 50}

 

            var obj2={a:10,b:{a:20}}; //此刻我从头赋值给obj2,转变地点了

            console.log(obj2===obj);//false

            console.log(obj,obj2);//{a: 1} {a: 10, b: {…}}不一样了

            

js object类型转换 内存泄漏 垃圾回收机制

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/33026.html