值类型与引用类型的区别
# 数据类型
JavaScript共有八种数据类型:Number, String, Boolean, null, Symbol,undefined, Object, BigInt
其中 Symbol和BigInt是ES6 中新增的数据类型:
- Symbol代表创建后独一无二且不可变的数据类型,它主要是为了解决可能出现的全局变量冲突的问题。
- BigInt 是一种数字类型的数据,它可以表示任意精度格式的整数,使用BigInt可以安全地存储和操作大整数,即使这个数已经超出了Number 能够表示的安全整数范围。
# 基本数据类型
数字(Number):表示整数和浮点数。
字符串(String):表示文本。
布尔值(Boolean):表示真或假。
空值(Null):表示一个空值或者空对象指针。
未定义(Undefined):表示一个未定义的值或变量。
符号(Symbol):表示一种唯一的标识符。
基本数据类型(原始/值),存储在栈中
# 引用数据类型
对象
(Object
):对象是 JavaScript 中最常见的引用类型,可以表示一组相关的数据和功能,它们是由键值对组成的属性(Property)集合。数组
(Array
):数组是一种特殊的对象,它可以存储一组有序的值,并使用数字索引进行访问。函数
(Function
):函数是 JavaScript 中的一等公民,可以作为值进行传递和赋值,也可以作为对象的方法存在。日期
(Date
):日期对象用于表示日期和时间,可以进行各种日期和时间操作。正则表达式
(RegExp
):正则表达式对象用于表示一种模式,可以用于匹配字符串。键值对集合
(Map 和 WeakMap
):Map 对象是一组键值对的有序列表,而 WeakMap 对象也是一组键值对的列表,但它的键必须是对象,并且在该对象被垃圾回收后,对应的键值对也会被自动删除。集合
(Set 和 WeakSet
):Set 对象是一组唯一值的有序列表,而 WeakSet 对象也是一组唯一值的列表,但它的值必须是对象,并且在该对象被垃圾回收后,对应的值也会被自动删除。类
(lass
):类是 ECMAScript 6 中新增的语法,它是一种特殊的函数,可以用于创建对象的模板。
引用数据类型存储在**堆(heap)**中的对象,占据空间大、大小不固定。如果存储在栈中,将会影响程序运行的性能;
引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。