JavaScript 的基本数据类型、引用类型是什么?二者存储的方式有哪些区别?

回答·8
最热
最新
  • Js 的数据类型,有基本类型和引用类型。基本类型有 string  number  boolean  null  undefinded  symbol 这些类型的数据最明显的特性是大小固定,体积轻量,相对简单。它们被放在 js 的栈内存里面。而 object  array   function 等等属于引用类型。这类数据比较复杂,占用空间较大,且大小不定。他们被放在 js 的堆内存里面。 而堆和栈是不同的数据结构,栈是线性表的一种,而堆是树形结构。 而我们对两种数据结构进行访问的过程也不一样。当我们访问基本数据类型的值的时候,可以在栈内存中直接访问到该变量的值。而我们访问引用数据类型的时候,需要先在栈内存里面获取它的引用,即它在堆内存里面的地址,拿到这个引用再去堆内存里面查询,才能拿到我们想要的值。
  • 基本数据类型:Number、String、Boolean、null、undefined,基本数据类型是按值访问的,因为可以直接操作保存在变量中的实际值; 示例: var a = 10 ; var b = a ; b = 20 ; console.log(a); // 10 上面,b 获取的是 a 值的一份拷贝,虽然,两个变量的值相等,但是两个变量保存了两个不同的基本数据类型值。b 只是保存了 a 复制的一个副本。所以,b 的改变,对 a 没有影响。 引用数据类型:也就是对象类型 Object,比如 object、array、Function、Date 等; JavaScript 的引用数据类型是保存在堆内存中的对象。 与其他语言的不同是,你不可以直接访问堆内存空间中的位置和操作堆内存空间。只能操作对象在栈内存中的引用地址。 所以,引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象。示例: var obj1 = new Object(); var obj2 = obj1; obj2.name = "团团"; console.log(obj1.name); //团团 说明这两个引用数据类型指向了同一个堆内存对象。"obj1“赋值给“obj2”,实际上这个堆内存对象在栈内存的引用地址复制了一份给 obj2,但是实际上他们共同指向了同一个堆内存对象。 实际上改变的是堆内存对象,当 obj2 的值改变时,obj1 的值也会跟着改变。
  • 基本类型 srting number boolean undifined null  引用类型 object  基本类型是栈存储 引用是堆内存
  • Js 的数据类型,有基本类型和引用类型。基本类型有 string  number  boolean  null  undefinded  symbol 这些类型的数据最明显的特性是大小固定,体积轻量,相对简单。它们被放在 js 的栈内存里面。而 object  array   function 等等属于引用类型。这类数据比较复杂,占用空间较大,且大小不定。他们被放在 js 的堆内存里面。
  • 基本数据类型值存在栈内存,引用数据类型值存在堆内存。基本数据类型:Undefined、Null、Boolean、Number 和 String。Object、Array 和 Function 属于引用类型。
  • 基本数据类型和引用数据类型是 JS 两个核心基础,基本数据类型是数字,字符串,不尔,等一些可以直接获取数据的数据类型,存放于栈内存,引用数据类型有对象,数组这些需要通过指针变量获取数据的数据类型,存放于堆内存 最明显的区别就是在于变量的拷贝赋值,基本数据类型可以直接复制拷贝,而引用数据类型的复制拷贝则是对栈内存中存档的引用地址的拷贝,这样一来拷贝出来的数据指向的则为同一个对象
  • 基础数据类型有六种,字符串、数值、布尔、undefined、null 和 symbol,引用数据类型是 object、数组和 json 对象等,基础数据类型是存放到栈中的,引用数据类型变量名是存放到栈中的,变量实体是存放到堆中的,栈中的变量名指向堆中的变量实体,基础数据类型是一对一的关系,一个变量名对应一个变量值,引用数据类型是一对多的关系,一个或多个变量名对应一个变量实体,所以在修改引用数据类型的时候会出现修改一个变量的实体别的变量也发生变化的情况,这是因为栈中的多个变量名的指针指向堆中的同一个变量实体造成的
  • 基本数据类型有 Number,String,Boolean,null,undefind,symbol,Bigint,引用数据类型有对象,数组,函数,基本数据存在栈中,引用数据类型存在堆中