一、基本数据类型
js的基本数据类型分为两大类:基本数据类型和引用数据类型
基本数据类型:Number、String、Undefined、Boolean、Null、Symbol
基本数据类型的主要特点是赋值方式是传值,赋值后相互不会影响,并且值存在栈中。
引用数据类型:Object、Array、Function
引用数据类型的主要特点是赋值方式是传址,赋值后相互影响。并且值存在堆中。(因为引用数据的值的大小无法确定,要根据情况进行特定的配置)
判断数据类型方法:typeOf()
typeOf(null)返回Object 这是一个编程语言错误
二、栈(stack)和堆(heap)
栈
-
栈是一种先进后出,后进先出的数据结构
-
栈内存中的变量一般由电脑分配的固定大小的空间,它由系统自动释放,是内存中用于存放临时变量的一片内存块
-
栈内存中的数据发生复制行为时,系统会自动为新的变量分配一个新值,最后这些变量都是相互独立互不影响的
堆
堆内存存储的对象类型数据对于大小这方面,一般都是未知的,将其指针(地址)存放在栈内存中,指针指向堆内存的真实值,因为使用堆内存中的数据时要在栈中获取其地址再去堆中获取,故而存取速度较慢。
三、补充
Symbol:
ES6中引入的一种新的基础数据类型,表示独一无二的值
特点:
- Symbol的值是唯一的,用来解决命名冲突问题,相同参数 Symbol() 返回的值不相等
- Symbol值不能与其他数据进行运算
- Symbol定义的对象属性不能使用for...in循环遍历,但可以使用Reflect.ownKeys来获取对象的所有键名
基本用法:
let beline1 = Symbol()
let beline2 = Symbol()
beline1 === beline2 // false