JS的基本数据类型、栈和堆

83 阅读2分钟

一、基本数据类型

js的基本数据类型分为两大类:基本数据类型和引用数据类型

基本数据类型NumberStringUndefinedBooleanNullSymbol

基本数据类型的主要特点是赋值方式是传值,赋值后相互不会影响,并且值存在中。

引用数据类型ObjectArrayFunction

引用数据类型的主要特点是赋值方式是传址,赋值后相互影响。并且值存在中。(因为引用数据的值的大小无法确定,要根据情况进行特定的配置)

判断数据类型方法:typeOf()

typeOf(null)返回Object 这是一个编程语言错误

二、栈(stack)和堆(heap)

  • 栈是一种先进后出,后进先出的数据结构

  • 栈内存中的变量一般由电脑分配的固定大小的空间,它由系统自动释放,是内存中用于存放临时变量的一片内存块

  • 栈内存中的数据发生复制行为时,系统会自动为新的变量分配一个新值,最后这些变量都是相互独立互不影响的

堆内存存储的对象类型数据对于大小这方面,一般都是未知的,将其指针(地址)存放在栈内存中,指针指向堆内存的真实值,因为使用堆内存中的数据时要在栈中获取其地址再去堆中获取,故而存取速度较慢。

image.png

三、补充

Symbol

ES6中引入的一种新的基础数据类型,表示独一无二的值

特点

  • Symbol的值是唯一的,用来解决命名冲突问题,相同参数 Symbol() 返回的值不相等
  • Symbol值不能与其他数据进行运算
  • Symbol定义的对象属性不能使用for...in循环遍历,但可以使用Reflect.ownKeys来获取对象的所有键名

基本用法

let beline1 = Symbol()

let beline2 = Symbol()

beline1 === beline2  // false