基本数据类型:
Number,String,Boolean,null,undefined,symbol,bigint(后两个为ES6新增)
引用数据类型:
object:普通对象,函数对象、数组对象,正则对象,日期对象,Math数学函数对象等。
两种数据存储方式:
基本数据类型是直接存储在栈中的简单数据段,占据空间小、大小固定,属于被频繁使用的数据。栈是存储基本类型值和执行代码的空间,它们是直接按值存放的,所以可以直接按值访问。
引用数据类型是存储在堆内存中,占据空间大、大小不固定。引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址,当解释器寻找引用值时,会检索其在栈中的地址,取得地址后从堆中获得实体。
两种数据类型的区别:
-
堆比栈空间大,栈比堆运行速度快。
-
堆内存是无序存储,可以根据引用直接获取。
-
基础数据类型比较稳定,而且相对来说占用的内存小。
-
引用数据类型大小是动态的,而且是无限的。
关于undefined和null的区别 undefined定义未赋值 null定义了赋值了 值为null
什么时候将变量赋值为null?
1.初始时表明该对象即将被赋值为对象
2.结束时为了回收该对象
null 有属于自己的类型 Null,而不属于Object类型,typeof 之所以会判定为 Object 类型,是因为JavaScript 数据类型在底层都是以二进制的形式表示的,二进制的前三位为 0 会被 typeof 判断为对象类型,而 null 的二进制位恰好都是 0 ,因此,null 被误判断为 Object 类型。
区别?
1. undefined == null true undefined === null false 原因是值都是空值,但类型不同,typeof undefined输出undefined,但typeof null输出object。
2.undefined表示一个变量没有被声明,或者被声明了但没有被赋值(未初始化), 一个没有传入实参的形参变量的值为undefined,如果一个函数什么都不返回,则该函数默认返回undefined null表示空值,即什么都没有。
3.undefined不是一个有效的JSON,但null是。
4.undefined和null在转换为原始类型时,null在算术中转换为0,undefined不做转换,复杂类型(引用类型)Object :数组,对象,函数使用typeof,数组和对象都会返回object,函数返回function。