Set、Map、WeakSet 和 WeakMap 的区别
-
Set:
- 是一个集合,只包含唯一的值。
- 不允许重复的值,并按插入顺序进行迭代。
- 对值的引用是持久化的。
-
Map:
- 是一个键值对的集合,其中的键和值可以是任意类型。
- 键值对按照插入的顺序进行迭代。
- 对键和值的引用是持久化的。
-
WeakSet:
- 是一个只允许对象作为其成员的集合。
- 对象是弱引用,即当对象没有其他引用时,它会被垃圾回收机制自动回收。
- 不支持
size
属性和迭代。
-
WeakMap:
- 是一个键值对集合,其中的键必须是对象,值可以是任意类型。
- 键是弱引用,即当键没有其他引用时,它会被垃圾回收机制自动回收。
- 不支持
size
属性和迭代。
ES5/ES6 继承的区别
-
ES5 继承:
- 通过构造函数和原型链实现。
- 使用
Object.create()
创建原型链,或者直接设置原型来实现继承。 - 需要显式地调用父类构造函数,并手动设置子类原型的
constructor
属性。
-
ES6 继承:
- 使用
class
关键字和extends
关键字实现。 - 语法更加简洁和直观。
- 通过
super()
调用父类构造函数,并且子类的原型链和constructor
属性自动处理。
- 使用
setTimeout、Promise 和 Async/Await 的区别
-
setTimeout:
- 用于设置定时器,在指定时间后执行某个回调函数。
- 主要用于简单的延迟执行,但不适合处理复杂的异步操作链。
-
Promise:
- 代表一个异步操作的结果,处理异步操作的成功和失败。
- 通过链式调用
.then()
和.catch()
方法处理异步结果。 - 适用于处理异步操作的链式流程。
-
Async/Await:
- 基于
Promise
的语法糖,使异步代码看起来像同步代码。 async
函数返回一个Promise
,而await
用于等待Promise
的结果。- 提高了异步代码的可读性和维护性。
- 基于