一、js数据类型分为两种 ‘基本数据类型’ 与 ‘引用数据类型’
基本数据类型:number string boolean null undefined symbol bigInt
引用数据类型: Array RegExp Object function data set map
二、基本数据类型与引用数据类型的区别
基本数据类型存储: 主要针对(Number、String、Boolean)三种数据。直接存储在栈(stack)中,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。
引用数据类型存储: 主要针对Object、Array这两种引用数据以及null, 同时存储在栈(stack)和堆(heap)中,占据空间大、大小不固定。引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。
三、判断数据类型
console.log(typeof null); //object
console.log(typeof 'sss');//string
console.log(Object.prototype.toString.call([]));//[object Array]
console.log([] instanceof Array); //true
let obj = {}
console.log(obj.constructor == Object); // true
使用typeof检测基本数据类型的时候null会返回Object是因为,Js中的基本数据类型都存储在32位的二进制单元当中,低三位的数字用于表示该数据的类型,当传入一个null的时候,因为null存储时32位的数字表示都是0,所以低三位也是0,typeof就将其认定为object类型的了。
检测引用数据类型的方法有
instanceof 只有知道数据类型才可以判断 语法: 要判断数据类型的变量 instanceof Array
constructor 语法: 要判断数据类型的变量.constructor === Array
Object.prototype.toString.call() 原生js最全能的数据类型判断 "[object 数据类型]"
四、数据类型的执行顺序
1.基本数据类型的执行顺序
2.引用数据类型的执行顺序