2. 值和引用
JS的基本数据类型有哪些?基本数据类型和引用数据类型的区别
回答:
在js中,数据类型可以分为:基本类型和引用类型
7种基本数据类型
string, number, boolean, undefined, null, symbol, bigIntsymbol是ES6新添加的基本数据类型,
BigInt是 ES11(即 ECMAScript 2020)标准新增的内容引用数据类型只有一种:
object基本数据类型的值称为 原始值 或 简单值
引用数据类型的值称为 复杂值 或 引用值
二者区别在于:
原始值表示JS种可用的数据或信息的最底层形式或最简单形式。简单值被称为原始值,是因为它们是不可细化的
原始值的数据是存储于内存中的栈区里面的
引用值object,是一个对象,因为对象可以向下拆分成多个简单值或复杂值
引用值在内存中的大小是未知的,因为引用值可以包含任何值。所以存在堆区
总结:
访问方式
原始值:访问到的是值
引用值:访问到的是引用地址
比较方式
原始值:比较的是值
引用值:比较的是地址
动态属性
原始值:无法添加动态属性
引用值:可以添加
变量赋值:
- 原始值:赋值的是值
- 引用值:赋值的是地址
比较方式
简单值采用值比较,复杂之采用引用比较
var a = 10;
var b = 10;
log(a === b) //true
var c = new Number(10) // Number {10}
var d = c
log(c === d) //true
d = 10
log(c === d) //false
3. 包装类型
ES提供了三种特殊引用类型(包装类型):Boolean、Number、String
包装对象,就是当基本类型以对象的方式去使用时,JavaScript 会转换成对应的包装类型,相当于 new 一个对象,内容和基本类型的内容一样,然后当操作完成再去访问的时候,这个临时对象会被销毁,然后再访问时候就是 undefined。
number、string、boolean 都有对应的包装类型。
var isTure = new Boolean(true) var num = new Number(10) var str = new String('string')因为有了基本包装类型,所以JavaScript 中的基本类型值可以被当作对象来访问。
基本类型特征:
- 每个包装类型都映射到同名的基本类型
- 在读取模式下访问基本类型值时,就会创建对应的基本包装类型的一个对象,从而方便了数据操作
- 操作基本类型值的语句一经执行完毕,就会立即销毁新创建的包装对象