欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

1-JavaScript变量

程序员文章站 2022-03-07 09:12:54
对于JS的变量这个环节,其实主要要了解一下JS数据类型的存储方法 JS有两种不同的数据类型:基本类型(原始类型),引用类型(对象类型)。 1.栈 (stack) 和 堆 (heap) 栈 (stack):栈会自动分配内存空间,由系统进行释放,用来存放基本数据类型 [ 数字(Number)、字符串(S ......

1-JavaScript变量

 

  • 对于js的变量这个环节,其实主要要了解一下js数据类型的存储方法
  • js有两种不同的数据类型:基本类型(原始类型)引用类型(对象类型)

  1.栈 (stack) 和 堆 (heap)

   (stack)栈会自动分配内存空间,由系统进行释放,用来存放基本数据类型 [ 数字(number)、字符串(string)、布尔(boolean)、空(null)、未定义(undefined)] 占据固定的大小的空间,是一种先进后出的数据结构。

1-JavaScript变量

 

 

          

 

       堆 (heap)堆是基于散列算法的数据结构,每创建一个新的对象,在堆内存中开辟一片新的空间;动态分配的内存,大小不确定,也不会自动进行释放; 生命周期由虚拟机的垃圾回收算法来决定;

 


 

   

2.javascript 数据类型 (基本数据类型,引用数据类型)

    基本数据类型(5种) 数字(number)、字符串(string)、布尔(boolean)、空(null)、未定义(undefined);直接按值

       【存放在栈内存中的简单数据段,数据大小确定,内存空间大小也确定

       引用数据类型array,object;【存放在堆内存的对象,变量保存的是一个指针,空间大小不一样】

 


 

  

 3.图解 数据类型的存储方式

     基本数据类型的值是直接存在栈内存中,值与值直接是相互独立的,修改其中的一个变量不会对其他变量进行影响;

     引用数据类型的值是保存在堆内存中,每创建一个新的对象,就在堆内存中开辟一个新的空间,变量保存的事对象的内存地址(对象的引用),相同变量保存相同的对象的时候会影响值的改变;

   引用类型的存储需要内存的栈区和堆区(堆区是指内存里的堆内存)共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,也可以说是该对象在堆内存的地址。

简言之: 基本数据类型的值直接保存在栈内存;引用类型的变量标识和指针保存在栈内存,引用类型的对象保存在堆内存的地址;

      var name = '小花';
      var age = 10;
      var test;
      var arr = [1,2,3];
      var obj = {age:10};

      通过图形表示基本数据类型和引用数据类型在内存中的存储情况:

1-JavaScript变量

 

 

        name,age,test三种基本数据类型是直接存储在栈内存中;

       arr,obj在栈内存中只是存储了一个地址来表示在堆内存中的引用;

   

var a=[1,2,3];
var b=a; //传地址,对象中传给变量的数据是引用类型,存储在堆内存中
b[0]=20; //b改变 会影响a的值的改变,因为他们指向的是同一个对象;
console.log(a[0]);//20;

注意:b只是拥有了一个不同名的‘指针’,去指向在堆内存中的对象;并不是直接赋堆内存的对象,所以b改变也会改变的a的数值;所以b修改的时候,会根据地址回到a堆中修改,c则直接在栈中修改,并且不能指向a堆内存中。

 当b清空的值时,只是断开该变量与对象的联系,另一个对象并不受影响

 


 

  

 4.数据类型的比较

  • 比较两个基本数据类型的时候是对值之间的比较;
  • 比较两个引用数据类型的时候,是对象的内存地址比较;

     


 

 注意: 引用数据类型的复制,就牵扯到 ‘浅拷贝’ 和 ‘深拷贝’ 的学习