数据类型及其区别
八大数据类型
undefined:变量未初始化
null:空值或不存在的对象
boolean:布尔值,true 或 false
number:可表示整数和浮点数,其中包含特殊值 NaN 与 Infinity
string:字符串
symbol:创建唯一且不可变的值,主要用于对象属性的唯一标识,避免属性名冲突。(ES6 新增)
bigint:可表示任意精度的整数,允许操作超过 number 表示范围的整数。(ES6 新增)
object:对象,其中囊括了普通对象、数组以及方法。
数据类型
- 原始数据类型:
- String
- Number
- Boolean
- Null
- Undefined
- Symbol
- BigInt
- 引用数据类型:
- Object
- Array
- Function
- Date
- RegExp
- Set
- Map
数据类型判断
typeof
- 可以判断原始数据类型
- 可以判断函数
- 无法判断 null
- 无法判断对象
instanceof
- 可以判断对象类型
- 无法判断原始数据类型
- 无法判断 null
- 无法判断函数
Object.prototype.toString.call()
- 可以判断所有类型
- 无法判断 null
- 无法判断函数
constructor
- 可以判断所有类型
- 无法判断 null
- 无法判断函数
数据类型转换
- 转换为字符串
- toString()
- String()
- 拼接字符串
- 转换为数字
- Number()
- parseInt()
- parseFloat()
- 转换为布尔值
- Boolean()
- !!
- 转换为对象
- Object()
- 转换为数组
- Array.from()
- Array.prototype.splice.call()
基础(原始)类型 与 引用类型的区别
存储位置区别
基本类型存储在 栈(stack) 中,值直接保存在变量访问的位置,由于其大小固定且频繁使用,存储在栈中具有更高的性能。 引用类型存储在 堆(heap) 中,占用空间较大且大小不固定,变量保存的是对实际对象的引用(即指针),这些引用存储在栈中。
赋值区别
基本类型:复制的是值本身。例如,将一个 number 类型的变量赋值给另一个变量,两个变量互不影响。- 值与值之间是独立存在的,比较时是按值比较
引用类型:复制的是指针。多个变量引用同一个对象时,一个变量的修改会影响其他变量。比较时是按引用比较