请说出js基础类型
- null
- undefined
- String
- number
- Boolean
- symbol
- BigInt
引用类型
- Object
请给出js判断类型得方法及其原理
- typeof:检测数据类型的原理就是通过检测这1-3位机器码实现检测不同数据类型。
- instanceof:用于检测构造函数
prototype属性是否出现在某个实例对象的原型链上。 - object.prototype.toString.call(): JavaScript 调用 toString 方法将对象转换为一个原始值(由于Object.prototype.toString()本身允许被修改,像Array、Boolean、Number的toString就被重写过,所以需要调用Object.prototype.toString.call(arg)来判断arg的类型,call将arg的上下文指向Object,所以arg执行了Object的toString方法)。
- Array.isArrya():这个方法是通过查看
value的[[Class]]属性来判断的。在 JavaScript 中,对象的[[Class]]属性是一个内部属性,用于确定对象的类型。数组的[[Class]]属性是 "Array"
请给出Map、Set和Object区别
Object:
- 本质上是键值对的集合(Hash结构),只能用字符串或者symobl做为key值
- 无序存储,需要手动计算大小,性能相对较低,内存使用较高。
- 使用点或括号操作符访问属性,使用
in操作符检查属性是否存在。Object的键不可重复。 - Object是可枚举类型(如果考for of 与for in时该知识点是重点)
Map:
- 也是键值对的集合,但键的范围不限于字符串,可以是任意类型(包括对象、数组等)。Map用于存储键值对,且键值对是有序的。
- Map有序存储,性能较好,尤其是对于需要保持插入顺序的应用场景。
- Map拥有iterator
- Map拥有size属性
Set:
- 类似于数组,但成员值是唯一的,没有重复的值(无论是原始值或者是对象引用)。Set用于存储唯一值的集合(注意:向 Set 加入值的时候,不会发生类型转换,所以
5和"5"是两个不同的值) - Set拥有iterator
- Set拥有size属性
请给出for in和for of区别
for in:适用于遍历对象的可枚举属性,包括对象自身属性和从原型链继承的属性。使用for in遍历对象时,可以获取对象的键名和键值。 for of:不能直接用于遍历普通对象,因为普通对象没有部署原生的iterator接口。