开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情 今天复习了一下js和es6的知识,对一些知识点进行了总结。学过的知识点都忘记了,只能多复习,而且学的多了,有点混淆
new操作符的实现原理
- 通过
new关键字创建一个对象。 - 设置这个对象的原型,指向构造函数的
prototype对象。 - 设置
this指向构造函数实例,并执行构造函数的代码(即为this添加属性和方法) - 判断构造函数的返回值,返回值是值类型,返回创建的对象,返回的是引用类型,创建引用类型的对象。
Map和Object的区别
Map是ES6中提出的一种新的数据结构。
Map有set(键名,键值),delete(键名)(返回值是Boolean类型),clear(没参数),has(键名),get(键名)这几种方法,可以收用Object.keys()、Object.values()、Object.entries()方法进行遍历
| Map | Object | |
|---|---|---|
| 意外的键 | Map默认不包括任何键,只包括显示插入的键,也就是通过set方法添加的 | Object 有一个原型, 原型链上的键名有可能和自己在对象上的设置的键名产生冲突。 |
| 键名的类型 | 键名可以是任何类型的值 | 键名只能是字符串 |
| 键的顺序 | 按照插入的顺序显示 | Object顺序不固定 |
| 迭代 | Map具有iterator接口,可以进行迭代(使用for of) | 没有迭代器,需手动添加 |
| size | Map键值对个数可以通过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])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。当要做一件事,超过多长时间就不做了,可以用这个方法来解决 。