JS基本和引用数据类型
前面说到6中数据类型,现在把数据类型细分为两种:
基本数据类型
String Number Boolean Null Undefined
引用数据类型
Object
结合例子说明:
var a = 123;
var b = a;
a++;
console.log(a);// 124
console.log(b);// 123
这时a的值经过a++后变为124,b的值仍为123。a和b完全独立,相互不影响。
var obj = new Object();
obj.name = "张三";
var obj2 = obj;
//修改obj的name属性
obj.name = "李四";
console.log(obj.name);// 李四
console.log(obj2.name);// 李四
此时在修改第一个对象的时候对另一个对象也产生了影响。
由于JS变量都保存在栈内存中。
- 基本数据类型直接在栈内存中存储,值与值之间独立存在。
- 对象保存在堆内存中,每创建一个新的对象会在堆内存中开辟出一个新的空间,变量保存的是对象的内存地址(对象的引用)。如果两个变量是同一个对象的引用,当一个变量修改属性时另一个也会受到影响。
把obj2设置为null :
obj2 = null;
console.log(obj);// [object]
console.log(obj2);// null
把obj2的值设置为null后obj并未受到影响,由图所示,理解为obj2断开了连接。
扩展
var a = 10;
var b = 10;
console.log(a == b);// true
var obj3 = new Object();
var obj4 = new Object();
obj3.name = "张三";
obj4.name = "张三";
console.log(obj3 == obj4);// false
虽然两个对象长得一样,可是他们开辟的空间地址不同,比较数据类型时会返回false。