JS知识点总结
文章目录
一、怎么获取对象的Symbol属性?
const numSymbol = Symbol(1);
const hasSymbolObj = {
[numSymbol]: 1,
2: 2
};
1.Object.keys可以吗?
我们使用Object.keys
来看一下,能不能获取到Symbol
属性
console.log(Object.keys(hasSymbolObj)); // [ '2' ]
Object.keys
获取不到。
2.for…in…?
for (let prop in hasSymbolObj) {
console.log('prop', prop); // prop 2
}
for...in...
也获取不到。
3.Object.getOwnPropertyNames?
console.log(Object.getOwnPropertyNames(hasSymbolObj)); // [ '2' ]
该方法可以遍历到不可枚举的属性,但同样也获取不到Symbol
属性
4.Object.getOwnPropertySymbols
console.log(Object.getOwnPropertySymbols(hasSymbolObj)); // [ Symbol(1) ]
二、Promise到底解决了什么问题?
当被问到这个问题时,相信很多前端新人都会说:“Promise
的提出解决了异步任务出现的回调地狱的问题”,这么说没毛病。但是这并不是Promise
真正主要解决的问题,这只是解决了可读性差的问题,还有另外一个重要的问题就是“可信任问题”。
什么是可信任问题
假设你使用了一个第三方库,执行一个异步任务需要传一个回调函数进去,当任务完成时执行该回调函数。但是这个第三方库真的可以信任吗?换句话说,你只是负责传一个函数进去,但是没有这个函数的控制权!这就可能造成以下问题:
- 这个回调函数在何时执行?是不是会提前或者滞后执行?
- 这个回调函数会被执行几次呢?按理说是只执行一次,但如果执行了多次是不是会造成一些严重的后果比如支付相关的回调函数。
而Promise
就可以解决这些问题。首先,Promise
的状态只能更改一次,并不会重复执行。其次,每次状态变更后会立即将任务放入微队列中等待执行。这样看来Promise拿到了回调函数执行的控制权,而不是交给第三方去控制,从而变得可信任。