JS的变量都是保存在栈内存中
基本数据类型:
基本数据类型的值直接在栈内存中存储,值与值之间是独立的,修改一个变量不会影响基本的变量
引用数据类型
引用数据类型是地址是保存在栈内存中,值保存在堆内存中,每创建(new)一个新的对象,就会在堆内存开辟一个新的空间,而变量保存的是对象的地址(对象的引用)
例:
var obj = new Object() ---- 在堆内存中开辟一个空间,在栈内存中保存的是obj的堆内存的地址
obj.name = "Asher" ---- 往变量对应的地址去添加(堆内存中添加)
var obj2 = obj ---- 将obj的地址复制给obj2,所以obj2和obj 指向同一个地址
obj.name = "gaoxue" ---- obj2也发生改变,两个变量保存的是同一个对象引用,当一个通过一个变量修改属性时,另一个也会受到影响
obj2 = null; ---- 当修改变量值的对象,别一个变量不会受到影响
当比较两个基本数据类型时就是比较值
var a = 10;
var b = 10;
a == b true
比较两个引用数据类型时,它是比较的对象的内存地址,如果 两个对象一模一样但是地址是不同的,所以返回false
var obj = new Object()
var obj2 = new Object()
obj == obj2 false