string比较特殊
引用数据类型:function object array
var a = 11
var b = 1
b = 12
console.log(a)//11 a的值不会随b值得改变而改变
var a = [1,2,3]
var b = a
a[0] = 2
console.log(b[0]) //2, b的值随着a的值改变而改,因为他们指向同一个内存地址
var a = [1,2,3]
var b = a
b = [11, 12, 13]//b指向了另一个内存地址,与a断开关联
a[0] = 2
console.log(b[0]) //11,b的值不随a的值改变而改变
比如说 var a = 11是基本数据类型,因此变量a存放的就是1这个值
var b = [1,2,3],[1,2,3]是引用数据类型,[1,2,3]是放在内存中的,而变量b存放的是[1,2,3]的地址,而不是[1,2,3]这个值
当使用b这个变量时,js解释器会通过b存放的内存地址,找到内存中的相应地址,将其中的值取出来返回
JavaScript中的值分为2大类:基本类型和引用类型。每种类型下面又分为5种类型。
基本类型:
数字类型:Number;字符串类型:String;布尔类型:Boolean(true和false);Undefined;Null。
引用类型:
函数、数组、日期、正则、错误。
注意:所有的引用类型都是对象,也就是Object对象下的一个类。
在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值。
对基本类型,是按值访问的,即通过值复制的方式来赋值和传递。
对引用类型,是按引用访问的,即通过引用复制的方式赋值和传递。在操作对象时,实际上是在操作对象的引用,而不是实际的对象。
你说的是值类型和引用类型。值类型都有一个独立的内存区域保存自己的值。
引用类型指向的是内存中的地址。
var ary1=[] // 第一次定义,分配内存a
var ary2=ary1// ary2 指向了内存a
ary2[0] =123// 其实就是改变了ary1[0]
值类型:
var a =1,b=a// 这时 b=1
b=3 // b=3,a还是1,因为独立的内存区域给B