js中变量分为两大类:
“基本数据类型” & “引用数据类型”
基本数据类型包括
- Number 数值
- String 字符串
- Boolean 布尔
- Null
- Undefined
- Synmbol (ES6)
引用数据类型包括
- Object 对象
- Array 数组
- Function 函数
- Date
- RegExp 正则
两种类型区别如下
- 基本数据类型
① 数据直接存储于栈中,可直接操作 - 引用数据类型
① 数据存储在堆中,并在栈中保存数据的引用地址
② js 不能直接操作对象的内存空间 (堆内存)
③ 引用类型的比较是引用的比较
const obj1 = { name: "c" }
const obj2 = { name: "c" }
console.log( obj1 === obj2 ) // false
引用地址不同
数据类型的比较
- ===
严格相等,比较数据类型和值大小 - ==
非严格相等,会进行类型转换
- null == undefined
- String / Boolean == Number 转换为数值并比较
- Object == String / Number / Symbol 将 Object 转换为原始类型并比较
检测方法:
- typeof
缺点:只能检测基本数据类型及 function,遇到引用数据类型及 null 统一输出为 Object
为何 typeof null 为 Object
对象通过二进制存储,若前三位均为 0 则判断为 Object
- instanceof
原理:查找目标对象的原型链
输出为布尔值 - Object.prototype.toString.call(thisArg) ⭐️
基本所有对象类型都可以通过此方法获取到,返回结果为[object Date/Function...]
- Object.prototype.constructor
返回创建实例对象的 Object 构造函数的引用