1、new 关键字做了什么?
function myNew (Fn,...args) {
const obj = Object.create(Fn) // 1 创建对象并绑定Fn构造函数的原型
Fn.apply(obj, ...args) // 2 绑定this 并执行构造函数逻辑
return obj //3 返回实例
}
2、map和object的区别?
-
相同点:都是键值对的集合,支持增加和删除键值对
-
不同点: 1、object键的类型必须是string或symbol 类型 如果是非string 会进行类型转换 map 键可以是任何类型,包括对象 数组 函数等不会进行类型转换
2、object 的key 是无序的不会安装添加的顺序返回,对于大于等于0的整数会按照添加的顺序返回,对于小数和负数会当作字符串处理;对于string类型,按照定义的顺序进行输出并且数字优于字符串;对于symbol类型,会直接过滤不会输出 可以通过Object.getOwnPropertySymbols()方法
map 的key是有序的安装插入的顺序返回
3、键值操作方法不同,object 可以通过点或 中括号形式 删除用delete map则通过set get delete clear
4、object 不具备Iterator特性 默认不能通过 for of 进行遍历。map结构的keys() values() entries() 方法返回值都具有Iterator特性
...持续更新中