数据类型分类:
- 基本数据类型:Undefined(未定义)、null(空的)、Number(数字)、Boolean(布尔值)、String(字符串)、Symbol(符号)、
BigInt (用于表示任意大的整数,解决了 Number 类型对大整数精度的限制)
注:Symbol 和 BigInt 是ES6 中新增的数据类型 - 引用数据类型:Object- - (对象),比如:array(数组)、function(函数)、date(时间)等
检测数据类型:
// typeof 检测一些基本的数据类型
let num = 1;
console.log(typeof num); // number
// instanceof 一般用来检测引用数据类型。注:undefined和null无法检测。
let arr = [];
console.log(arr instanceof Array); // true
// constructor 用于检测引用数据类型。注:undefined和null没有constructor属性,无法判断。
let arr = [];
console.log(arr.constructor === Array); // true
// Object.prototype.toString.call() 适用于所有类型的判断检测
let arr = [];
console.log(Object.prototype.toString.call(arr)); // [object Array]
存储区别
声明变量时不同的内存地址分配:
- 简单类型的值存放在栈中,在栈中存放的是对应的值
- 引用类型对应的值存储在堆中,在栈中存放的是指向堆内存的地址
不同的类型数据导致赋值变量时的不同:
- 简单类型赋值,是生成相同的值,两个对象对应不同的地址
- 复杂类型赋值,是将保存对象的内存地址赋值给另一个变量。也就是两个变量指向堆内存中同一个对象