b:{}}不一样了 js object类型转换 内存泄漏 垃圾回收机制
-------------------------------------------------------------*************
- 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