JavaScript基本数据类型和引用数据类型

6,660 阅读2分钟

基本数据类型

目前常见的有6种

  • Sting
  • Number
  • Boolean
  • null
  • undefined
  • Symbol

基本数据类型保存在栈内存中,因为基本数据类型占用空间小、大小固定,通过按值来访问,属于被频繁使用的数据。

引用数据类型(复杂类型)

  • Object
  • Date
  • function
  • RegExp
  • Array ...

引用数据类型存储在堆内存中,因为引用数据类型占据空间大、占用内存不固定。 如果存储在栈中,将会影响程序运行的性能; 引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。 当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体

下面这两张图可以表示这两种数据存储方式的不同:

ps :可以通过typeof检测基本类型和复杂类型,不过检测出来的复杂类型都是Object,如果想要检测复杂类型可以通过 instanceof 语法:object instanceof constructor

var a1=0;                 // typedof a1 -> number
var a2 = 'this is str';  //typedof a2 -> string
var a3 =null;           //typedof a3 -> null
var c= [1,2,3];        // c instanceof Array  ->true
var b={m:20};         // b instanceof Object ->true

基本数据类型与引用数据类型区别:

基本数据类型存在栈里,引用数据类型在栈里存地址,而在堆里存内容,如果定义数组(对象)m与数组n()相等,表示地址相同,所以m与n的指针指向同一个内容,改变内容,则m与n都会改变。

再来说栈内存和堆内存

js内存分为栈内存(stack)和堆内存(heap)

栈内存:是一种特殊的线性表,它具有后进先出的特性,存放基本类型。

堆内存:存放引用类型(在栈内存中存一个基本类型值保存对象在堆内存中的地址,用于引用这个对象)。