引用类型
原始类型 引用类型(对象、函数)
原始类型的变量,存放的具体的值
引用类型的变量,存放的是内存地址
凡是出现对象字面量的位置,都一定在内存出现一个新的对象
通过以下代码更好了解引用类型
// obj1 指向 对象 // 创建对象会开辟一个新的内存空间 var obj1 = { name: "123" //出现对象字面量的位置 会新开辟一块内存空间,用于存放对象的内容 }; //把obj1赋值给obj2 同时是把指向对象的地址也赋值给了obj2 此时obj1和obj2 指向同一个对象 共用了对象的地址 var obj2 = obj1; obj2.name = "456"; console.log(obj1.name, obj2.name); // 输出结果为 456 456
var obj1 = { name: "123" }; var obj2 = obj1; obj2 = { name: "456", age: 18 } console.log(obj1.name, obj2.name); // 输出结果为123 456 原因:新建的对象开辟了新的内存空间 并同时将同名的对象覆盖了 所以两个name地址是不同的
var user1 = { name: "张三", address: { country: "中国", city: "南昌" } }; var user2 = { name: "李四", address: user1.address }; user2.name = "王五"; user2.address.city = "丰城"; console.log(user1.name, user2.name); // 结果:张三 李四 console.log(user1.address.city, user2.address.city); // 结果:丰城 丰城 // 原因:每创建一个对象字面量 就会新开辟一块内存空间 user2里面的address引用的是user1中的address,所以两者使用了同一个地址 所以user2.address.city改变值会跟随改变
扩展知识:JS中的垃圾回收
垃圾回收器,会定期的发现内存中无法访问到的对象,该对象称之为垃圾,垃圾回收器会在合适的时间将其占用的内存释放。