/*
基本数据类型
String Number Boolean Null Undefined
引用数据类型
Object
JS中的变量都是保存到栈内存中的
基本数据类型的值直接在栈内存中存储,
值与值之间是独立存在的,修改一个变量不会影响其他变量
对象是保存到堆内存中的
每创建一个新的对象,就会在堆内存中开辟一个新的空间
而变量保存的是对象的内存地址
如果两个变量保存的是同一个对象引用,当通过一个变量改变属性时,另一个也会受到影响
*/
var a = 123;
var b = a;
a++;
console.log(a);//返回124
console.log(b);//返回123
var obj = new Object();
obj.name = "tom";
var obj2 = obj;
obj.name = "roy";
console.log(obj.name);//返回roy
console.log(obj2.name);//返回roy
图解:
变量a与变量b的值直接存储在栈中,值互不干扰
obj和obj2使用同一个内存地址,值相互影响
/*
obj2抛弃了obj的地址,改了新的地址,所以不会改变obj
*/
obj2 = null;
console.log(obj);//{name:'roy'}
console.log(obj2);//null
图解:
obj2换了新地址,开辟了新的空间,断开了与obj的联系,与obj不相干,所以不影响obj的值
/*
当比较两个基本数据类型的值时,就是比较值
比较两个引用数据类型时,就是比较内存地址,即使值相同,但地址不同,它仍会返回false。
*/
var c = 10,d = 10;
console.log(c == d);//true
var obj3 = new Object();
var obj4 = new Object();
obj3.name = "aaa";
obj4.name = "aaa";
console.log(obj3 == obj4);//false