持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
前言
Javascript中的数据类型分为基本数据类型和引用数据类型。
基本数据类型有:String、Number、Boolean、Null、Undefined、Symbol
引用数据类型有:Object
栈和堆
这里说的栈和堆为内存操作场景下的概念
javascript中变量都存在内存中,存储过程中内存开辟了两块区域:一个称为栈(stack),一个称为堆(heap)。
栈:栈会自动分配内存空间,并且会自动释放内存。占用固定的空间大小,用于存放简单的数据值,例如String、Number、Boolean等等,也就是说javascript中的基本数据类型存入到栈内存中。
堆:堆不会自动分配和释放,用于存放引用类型(引用类型存在堆内存里,引用类型的引用存在栈内存里)。
基本数据类型
String
存储字符的变量
const str1 = '字符串1';
const str2 = "字符串2";
Number
const num1 = 99;
const num2 = 99.09;
const num3 = 100e3;
const num4 = 100e-3;
NaN(Not a Number):
- 为Number类型,是一种特殊的数值
- NaN与任何数比较都为false,包含本身
- NaN与任何数进行运算都为NaN
Number类型为浮点类型,运算需要精确计算。
Boolean
布尔类型,只有true和false两个值
const a = true;
const b = false;
Null 和 Undefined
const x = null; // 没有对象,空值
const y = undefined; // 没有定义值
typeof null 为object,是因为在初代js中,为了性能考虑选择使用低位存储变量的类型信息。000开头代表对象,因为null全部为0,所以判断为object
Symbol
Symbol的实例唯一不可变,确保对象的属性不重复
const name = Symbol("name")
console.log(name) // Symbol(name)
引用数据类型
Javascript中的引用数据类型也就是对象数据类型(Object),包含Object、Array、Function、Data等
当创建一个对象类型时,堆内存中会开辟一个内存空间存放对象值,这个内存空间会拥有一个指针
const obj = {}
这里的常量obj,假设存放了指针#001,则在#001这个指针地址存放了值{}
const obj1 = []
const obj2 = []
obj2.push("a")
将变量赋值给另一个变量时,复制的是目标变量的指针地址。假设obj1的地址为#001,那么obj2的地址同样为#001。当对任意一个变量进行修改数据的操作时,相当于修改了地址#001对应的值,导致两个变量的值都发生了改变。
举个栗子:
let obj1 = {
name: "aaa"
}
console.log(obj1) // { name: 'aaa' }
let obj2 = obj1
console.log(obj2) // { name: 'aaa' }
obj2.name = "bbb"
console.log(obj2) // { name: 'bbb' }
console.log(obj1) // { name: 'bbb' }