Js 中的原始值和引用值

        最近开始注重自己的基础知识,以前总是觉得自己什么都要会一点,不精也没关系,现在想想,感觉这种想法是错误的。一些最基本的基础底层知识还是要很扎实的。

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的指针指向新的堆地址。
希望这篇文章对大家有帮助。。。。。。。

猜你喜欢

转载自blog.csdn.net/qq_22896159/article/details/81000178