对象里的对象 在栈和堆的储存

来源:2-3 新的声明方式const

慕莱坞9430059

2020-12-28

老师,为什么会出现下面两种情况,对象里面的 对象的属性值修改后会影响前面的输出?
对象里面的对象,在栈和堆上具体是怎么储存的呢?

let obj = {
    name: 'LiMing',
    age: '30',
    skill: {
        name: 'code'
    }
};

console.log(obj);
// {name: "LiMing", age: "30", skill: {…}}
obj.age = '31';
console.log(obj);
// {name: "LiMing", age: "31", skill: {…}}
let obj = {
    name: 'LiMing',
    age: '30',
    skill: {
        name: 'code',
        year: 1
    }
};

console.log(obj);
//{name: "LiMing", age: "30", skill: {name: "code", year: 2}}
obj.skill.year = 2;
console.log(obj);
//{name: "LiMing", age: "30", skill: {name: "code", year: 2}}
写回答

1回答

谢成

2020-12-28

问题中第一个例子中的obj.age属性是number型,所以是在栈内存,一个对象的改变不会影响其他对象。


问题中第二例子中的obj.skill属性是object,所以是存在堆内存的,只是一个引用,一个对象的改变会影响其他对象。

0
3
慕莱坞9430059
非常感谢!
2020-12-29
共3条回复

JavaScript ES(6-11)全版本语法 前端都需要的基础课

前端无门槛学习,从ES6到ES11,一套课程掌握JS最新语法

1328 学习 · 296 问题

查看课程