1.js基本类型和引用类型
首先js的变量有两种类型,基本类型值和引用类型值
基本数据类型:null,undefined,string,number,boolean,这五种数据类型是按值访问的,可以操作保存在变量中的是实际值
引用类型:是保存在内存中的对象,js不允许访问内存中的位置,也就是说不能操作对象的内存空间,操作对象是实际上是操作对象的引用而不是实际的对象,引用对象的值是按引用访问的,引用只发生在对象身上
我们可以为一个引用类型的值添加属性和方法
var a = new Object();
a.name = 'zhangsan';
但是为一个基本类型的变量设置属性和方法就会报错
var name = "Nicholas"; name.age = 27;
alert(name.age); //undefined
2.复制变量的值
除了保存方式不同,复制的方式也不同
1.如果在一个变量向另一个变量复制一个基本类型值,新对象会被分配一个新地址
2.当向另一个对象复制引用类型值的时候,同样也会为新变量分配空间,不同的是,这个值的副本实际上是一个指针,这个指针指向堆中存储的对象
var obj1 = new Object();
var obj2 = obj1;
obj1.name = "Nicholas";
alert(obj2.name); //"Nicholas"
由此可见 基本数据类型存储在栈中
引用数据类型的指针存储在栈中,指向存储在堆中的地址,解释器会先检索在栈中的地址,从堆中获得实体