JS知识点总结(十)

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拿到了回调函数执行的控制权,而不是交给第三方去控制,从而变得可信任。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值