数据类型
基本7+1引用
Null、Undefined、Boolean
String、Number、Bigint(任意长度)
Symbol(唯一且不可改变的值,定义对象的唯一属性名)
Object(Function、Date、Array)
-
区分数据类型 与 取值
eg. Boolean的值 true/false;Number的值 整数/浮点数/NaN/±Infinity
-
在内存的位置
栈:基本类型、对象指针(内存地址引用)
堆:对象的值
类型判断
| 适用于 | 无法检查 | |
|---|---|---|
| typeof | 基本6+function | null → object,object及派生 → object |
| object.prototype.toString.call | 所有(Error/Data),返回[Object Class]字符串 | |
| instanceof | 实例的原型链上是否有构造函数的.prototype | 基础类型 |
| isNaN | NaN为number型 |
数组4
- Array.isArray(arr)
- instanceof Array
- arr.proto === Array.prototype
- obj.prototype.toString.call
拷贝
- 浅拷贝:只复制了原始对象的属性值(引用类型复制引用)
-
- 遍历现有属性:for (let key in object) {clone[key] = object[key];}
- Object.assign(dest, [src1, src2, src3...])
- ...spread
- concat、slice
- 深拷贝:从内存复制真正的值,相互无影响
-
- 原理:递归,对每一层克隆:if(值is对象)递归浅拷贝;else浅拷贝。
-
-
- 轮子:lodash的_.cloneDeep(obj)
-
-
-
- 手写:
-
参考与图片来源