new操作符的实现原理、Map和Object的区别、Promise.all和Promise.race的区别的使用场景

137 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情 今天复习了一下js和es6的知识,对一些知识点进行了总结。学过的知识点都忘记了,只能多复习,而且学的多了,有点混淆

new操作符的实现原理

  1. 通过new关键字创建一个对象。
  2. 设置这个对象的原型,指向构造函数的prototype对象。
  3. 设置this指向构造函数实例,并执行构造函数的代码(即为this添加属性和方法)
  4. 判断构造函数的返回值,返回值是值类型,返回创建的对象,返回的是引用类型,创建引用类型的对象。

Map和Object的区别

MapES6中提出的一种新的数据结构。 Mapset(键名,键值)delete(键名)(返回值是Boolean类型),clear(没参数)has(键名),get(键名)这几种方法,可以收用Object.keys()Object.values()Object.entries()方法进行遍历

MapObject
意外的键Map默认不包括任何键,只包括显示插入的键,也就是通过set方法添加的Object 有一个原型, 原型链上的键名有可能和自己在对象上的设置的键名产生冲突。
键名的类型键名可以是任何类型的值键名只能是字符串
键的顺序按照插入的顺序显示Object顺序不固定
迭代Map具有iterator接口,可以进行迭代(使用for of)没有迭代器,需手动添加
sizeMap键值对个数可以通过size获取Object的键值对需要手动计算
性能在频繁删减键值对的情况下表现更好在频繁删减键值对的情况下未做优化

Promise.all和Promise.race的区别的使用场景

(1)Promise.all Promise.all可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组,而失败的时候则返回最先被reject失败状态的值。

Promise.all中传入的是数组,返回的也是是数组,并且会将进行映射,传入的promise对象返回的值是按照顺序在数组中排列的,但是注意的是他们执行的顺序并不是按照顺序的,除非可迭代对象为空。

需要注意,Promise.all获得的成功结果的数组里面的数据顺序和Promise.all接收到的数组顺序是一致的,这样当遇到发送多个请求并根据请求顺序获取和使用数据的场景,就可以使用Promise.all来解决。
(2)Promise.race 顾名思义,Promse.race就是赛跑的意思,意思就是说,Promise.race([p1, p2, p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。当要做一件事,超过多长时间就不做了,可以用这个方法来解决 。