引用类型
原始类型 引用类型(对象、函数)
「变量之间的赋值是复制粘贴的过程,变量的新的值会替代旧的值」
「原始类型的变量,存放的具体的值」
var a = 123;
var b = a;
b = 234; //原始类型的变量存放的是具体的值
console.log(a, b); // 123 234
「引用类型的变量,存放的是内存地址」
「凡是出现对象字面量的位置,都一定在内存出现一个新的对象」
// obj1持有xx对象的引用
// obj1指向xx对象
var obj1 = {
name: "123",
age: 10
}; //出现对象字面量,那么就会开辟一块新的内存空间。 用于存放对象的内容,叫做内存首地址
var obj2 = obj1; // 将obj1的地址复制到obj2中 --》 obj1和obj2持有共同的引用 /obj1和obj2指向同一个对象
obj2.name = "wjh";
console.log(obj1.name, obj2.name); // "wjh" "wjh" 因为指向的是同一个对象 所以要变一起变
var obj1 = {
name: "123",
age: 10
};
var obj2 = obj1;
obj2 = {
name: "456"
}; // 遇到对象字面量 系统就会开辟一个新的内存空间
console.log(obj1.name, obj2.name); // 123 456
var user1 = {
name: "u1",
age: 10,
address: {
country: "中国",
city: "上海"
}
};
var user2 = {
name: "u2",
age: 20,
address: user1.address // 属性中也是存放的地址 复制也是复制的地址 指向同一对象
};
user2.name = "user2";
user2.address.city = "北京";
console.log(user1.name, user2.name); // "u1" "user"
console.log(user1.address.city, user2.address.city); // "北京" "北京"
var obj1 = {
a: "123",
b: "456",
sub: {
s1: "abc",
s2: "bcd"
}
};
var temp = obj1.sub;
var obj2 = obj1;
obj2.sub = {
s1: "s",
s2: "ddd"
};
console.log(obj1.sub.s1, obj2.sub.s1, temp.s1);// s s abc
- 原始类型当中俩个变量交换
var a = 123;
var b = 456;
var temp = a;
a = b;
b = temp;
console.log(a, b);
var item = {
name: "foo",
parent: {
name: "bar"
},
child: {
name: "goo"
}
};
// 将item的parent和child互换,不可创建新对象
// item.parent item.child
var temp = item.parent;
item.parent = item.child;
item.child = temp;
- 补充:在JS中,变量在使用时可以不写var
不写var直接赋值,相当于给window的某个属性直接赋值
a = 1;
console.log(a, window.a);
- JS中的垃圾回收
垃圾回收器,会定期的发现内存中无法访问到的对象,该对象称之为垃圾,垃圾回收器会在合适的时间将其占用的内存释放。