定义:
基本数据类型: Number、String、Boolean、Null、 Undefined
引用数据类型: 函数、数组、正则等除了基本数据类型以外的数据
基本数据类型
基本数据类型是指存放在栈中的简单数据段,数据大小确定,定义后值不可更改,假如更改需要先销毁原来的值,而字符串的修改实际上并没有修改,而是去返回一个新的值。
举个栗子:
var a=2; //2赋值给a
a=3; //将a原有的值销毁,重新把3赋值给a
var s ="hello";
s.toUpperCase();//返回HELLO,这是一个新的字符串,和原来的s无关
alert(s)//hello
引用数据类型
存放在堆内存中的对象,大小可更改,对象比较比较的是引用地址,所以即使两个对象包含相同属性和相同值,也是不相等的。只有他们引用同一个对象时,才相等。
举个栗子:
var o={x:1},p={x:1};
o===p //false,因为这两是不一样的对象,地址不一样
var a=[]; //a指向一个空数组
var b=a; //此时b中存放原数组的地址,所以a和b此时指向是一样的
b[0]=1;
alert(a[0]);
a===b; //true,因为a和b引用的是同一地址,所以a,b相等
综合:
var a = [1,2,3,4,5];
var b = a;//传址 ,(数组是引用类型)对象中传给变量的数据是引用类型的,会存储在堆中;
var c = a[0];//传值,把对象中的属性/数组中的数组项赋值给变量,这时变量C是基本数据类型,存储在栈内存中;改变栈中的数据不会影响堆中的数据
alert(b);//1,2,3,4,5
alert(c);//1
//改变数值
b[4] = 6;
c = 7;
alert(a[4]);//6
alert(a[0]);//1