数据类型
js中的基本数据类型, 分别为 string
, number
, boolean
, undefined
, function
, object
, symbol
以及未来的 BigInt
.
值类型
保存在 栈 中, 每次复制与赋值操作的都是变量本身的值
const a = 1;
const b = 1;
const c = true;
const d = false;
console.log(a === b); // true
console.log(c === d); // true
注意: 简单类型 !== 值类型
const a = 1;
const b = new Number(1);
a === b; // ? false
a.length = 2;
b.length = 2;
a.length // ? undefined
b.length // ? 2
// 大坑
const c = new String('');
c.length // ? 0
c.length = 2;
c.length // ? 0
引用类型
保存在堆中, 在赋值等操作实际操作的是对象的内存地址.
- 除
function
外, 通过typeof
不能判断其准确类型 - 在操作引用类型是一定注意深拷贝和浅拷贝
- 使用
instanceof
和Object.prototype.toString.call
来判断其精确类型
const a = {};
const b = {};
a === b; // false
const a = {test: 1};
const b = a;
b.test = 2;
a.test // 2
// 分析
// eg1
a = {n: 1};
a.x = a = {n: 2}
a.x // ?
// eg2
a = {n: 1};
b = a;
a.x = a = {n: 2}
a.x // ?
b.x // ?