码迷,mamicode.com
首页 > 编程语言 > 详细

javaScript的引用值和原始值的存放位置

时间:2019-08-18 17:56:27      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:复制   str   数组   ring   注意   obj   添加   数据   find   

在js中变量可以存放两种值也就是原始值和引用值

五大原始值:number String null  boolean undefind

引用值:例如 function arry  data  Object RegExp

原始值和引用值他们的存放位置是不一样的,原始值存放在栈内存中,而引用值存放在堆内存中

 

原始值的实例:

    当我们定义了一个变量 例var  a = 123;然后再定义一个b将a赋予b ;然后在改变a的值   a = 234 ;分别alert弹出a ,b  。a的值是234 ;  b的值是123;

 

 过程详解:

   第一步在栈内存中声明一个空间 a 和声明一个空间 b 然后将值123赋值给a;然后b将a空间里的数值复制一份保存在b空间里,  最后 a = 234;是又开了一个空间存放一个234,然后让a指向它 ;而同时空间123的指向就会消失      *注意( 重新赋值并不是将原有的数值擦除然后 重写,而是重新在一个空间内写入并将名字转移过来)

 

 

引用值的实例:

          以数组为例:当我们声明一个数组,var arr = [1,2,3];  var arr1 = arr;  arr.push(4); 然后分别输出两个数组 值都是1234;

          再添加代码: arr = [5,6,7]; 然后再输出 arr和arr1  分别为 567 和1234

 

 过程详解:

       声明一个数组arr ;就是再堆内存中声明了一个空间,然后将数据存入空间内,在栈内存中声明存放一个数组的指向地址;然后再将arr的地址复制给arr1 ;紧接着像数组里添加了数字4,因为arr和arr1指向同一个空间,所以堆内存里的值改变他们都会改变;

       然后将arr重新赋值;就是重新在对内存里声明空间,然后栈内存的指向就会发生改变,所以他们的输出结果不一致

 

****重新赋值就是另声明一个空间

 

 

************有误请留言更正**************

  

    

javaScript的引用值和原始值的存放位置

标签:复制   str   数组   ring   注意   obj   添加   数据   find   

原文地址:https://www.cnblogs.com/wyb-com/p/11372817.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!