js中数据类型包括原始类型和引用类型,其中原始类型(primitives types):undefined,null,boolean,number,string,Symbol(ES6新增);引用类型:Object类型。
1. 原始类型变量存储
原始类型的变量存放在栈中,且是不可变的。例如:
var a = 10;
var b = a;
a = 20;
那么栈内存的变化如下:
对于不可变性,如进行操作:var a = 'str'; a.toUpperCase(); console.log(a); 变量a保持不变,依然为'str'。
2. 引用类型变量存储
引用类型变量存储在堆中,变量在栈中保存堆的引用地址。例如:
var obj = {name:'str'};
var obj1 = obj;
obj.name = 'str1';
console.log(obj1.name); //输出'str1'
内存的变化如下:
所以引用类型变量保存的是堆中的地址,一个对象改变导致另一个对象也跟着改变。
另外,变量在传参时也是按照原始类型传值,引用类型传引用地址的方式传递参数。
var o = {name:'str'};
function fn(obj){
obj.name = 'str1';
}
fn(o);
console.log(o.name); //输出‘str1’
网友评论