数据类型
js数据类型有6种:
number
string
boolean
object
function
undefined
其中number、string、boolean、undefined是值类型,function和object是引用类型。
判断数据类型
typeof和instanceof都是js中用来判断数据类型的方法
typeof适用于判断数据基本类型的场景,返回结果可能是
"undefined"
,"boolean"
,"number"
,"string"
,"object"
,"function"
, 和"symbol"
instanceof用来判断对象(包括内置对象和自定义对象)所对应的类的场景,用于检测对象是否是特定类型的实例,返回 true / false
null 和 undefined
undefined
表示一个声明了但未被赋值的变量,或者一个不存在的属性或索引。用
typeof
运算符检测null
变量的类型会返回"object"
,这是一个 JavaScript 设计上的历史错误。null
表示一个空值或不存在的对象。
栈和堆
基本类型保存在栈中,引用类型保存到堆中。
JS 内存空间分为栈(stack)空间、堆(heap)空间、代码空间。其中代码空间用于存放可执行代码。
栈空间
栈是内存中一块用于存储局部变量和函数参数的线性结构,遵循着先进后出 (LIFO / Last In First Out) 的原则。栈由内存中占据一片连续的存储空间,出栈与入栈仅仅是指针在内存中的上下移动而已。
JS 的栈空间就是我们所说的调用栈,是用来存储执行上下文的,包含变量空间与词法环境,var、function保存在变量环境,let、const 声明的变量保存在词法环境中。
堆
堆数据结构是一种树状结构。它的存取数据的方式与书架和书非常相似。我们只需要知道书的名字就可以直接取出书了,并不需要把上面的书取出来。
在栈中存储不了的数据比如对象就会被存储在堆中,在栈中只是保留了对象在堆中的地址,也就是对象的引用 ,对于这种,我们把它叫做 按引用访问 。
JS 就是动态语言,因为在声明变量之前并不需要确认其数据类型,所以 JS 的变量是没有数据类型的,值才有数据类型,变量可以随时持有任何类型的数据。
JS 值有 8 种数据类型,它们可以分为两大类——基本类型和引用类型。其中,基本类型的数据是存放在栈中,引用类型的数据是存放在堆中的。堆中的数据是通过引用和变量关联起来的。
闭包除外,JS 闭包中的变量值并不保存中栈内存中,而是保存在堆内存中。
Last updated