js 数据类型 存储位置

原始数据类型(Undefined,Null,Boolean,Number、String)

存储位置:栈

传值方式:按值传递

引用数据类型(对象、数组、函数)

存储位置:堆

引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址,当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后,从堆中获得实体。

var obj = {x : 0};
    obj.x = 100;    
    var o = obj;    //实际拷贝的是obj的内存地址
    o.x = 1;
    console.log(obj.x)       // 1,   obj被修改
    o = {x:100};  //等同于重新开辟内存,不是修改
    console.log(obj,o)         //{x:1} {x:100}

引用类型的值是同时保存在栈内存和堆内存中的对象

javascript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,那我们操作啥呢? 实际上,是操作对象的引用, 所以引用类型的值是按引用访问的。 准确地说,引用类型的存储需要内存的栈区和堆区(堆区是指内存里的堆内存)共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,也可以说是该对象在堆内存的地址。

经验分享 程序员 微信小程序 职场和发展