最近开始注重自己的基础知识,以前总是觉得自己什么都要会一点,不精也没关系,现在想想,感觉这种想法是错误的。一些最基本的基础底层知识还是要很扎实的。
Js原始值
原始值即一些代表原始数据类型的值,也叫基本数据类型,首先说一下js中有哪些原始值,Number
,String
,Boolean
,Null
,Undefined
这些基本数据类型都是原始值。原始值存储在栈中。意思就是说,当一个原始变量把值赋给另一个原始变量时,只是把栈中的内容复制给另一个原始变量,此时这两个变量互不影响,即当一个变量值改变时,另一个变量不会因此而发生任何变化。
var a = 10 ;
var b = a ;
a = 20;
console.log(b); //输出10 b的值不会因a的值的改变而该改变
Js引用值
引用值是指一些复合类型数据的值,包括Object
,function
,Array
,RegExp
,Data
,引用值于原始值不同,引用值把引用变量存储在栈中,而实际的对象存储在堆中。每一个引用变量都有一根指针指向其堆中的实际对象。
var a = [1,2,3] ;
var b = a ;
a.push(4) ;
console.log(b) ; //输出1,2,3,4
a = [12] ;
console.log(b) ; //输出1,2,3,4
console.log(a) ; //输出12
如图2所示,引用值a赋值给b时,各自的变量名存储在栈中,而实际对象值都指向堆中的同一个地址,当变量a通过方法改变值时,实际上时改变堆中内容,因此,此时b的值也会相应的改变。
如图3所示,当a通过非方法改变值时,系统会为该引用变量重新创建一个堆房间,此时,a的指针指向新的堆地址。
————————————————
版权声明:本文为CSDN博主「月亮与六便士0520」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_22896159/article/details/81000178