js引用类型和值类型

JavaScript012

js引用类型和值类型,第1张

(1)值类型:字符串、数值、布尔值、undefined、null

(2)引用类型:对象、数组、函数

(1)值类型:

1、占用空间固定,保存在栈中

2、保持和复制的都是值的本身

3、基本数据类型都是值类型

4、一个方法在执行时会创建一个内存栈,并在执行结束后自然销毁,栈里面存储的是基础变量和一些对象的引用变量,基础变量的值是存储在栈中,而引用变量存储在栈中的指向堆中的数组或者对象的地址,这就是为什么 修改引用类型 总会影响到其他这个动作的引用变量。

(2)引用类型:

1、占用空间不固定,保存在堆。

2、保存和复制的是指向对象的一个指针。

3、堆内存的对象不会随方法的结束而被销毁,即使方法结束后,这个对象还可能被另一个引用变量所使用,那么这个对象依然不会销毁,只有一个对象没有任何引用变量引用它时,系统的垃圾回收机制才会去核实的时候回收它。

(1)动态属性;定义基本类型值和引用类型值的方式是类似的。但是,当这个值保存到变量中以后,对不同类型值可以自行的操作大相径庭。对于引用类型的值,我们可以为它已经属性和方法,也可以改变和删除其属性的方法,但是,我们不能给基本类型的值添加属性,只能给引用类型值动态的添加属性,以便将来使用。

(2)如果从一个变量向另一个变量复制基本类型值,会在变量对象上创建一个新值,然后把该值分钟到为新变量分配的位置上。

(3)传递参数;在向参数传递基本类型的值时,被传递的值会分钟给一个局部变量(即命名参数)。在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。

JS基本数据类型的变量存放的是基本类型数据的实际值;而引用数据类型的变量保存对它的引用,即指针。

JS基本数据类型:null undefined number boolean

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存放的内存地址,找到内存中的相应地址,将其中的值取出来返回