new Promise(resolve)和Promise.resolve

发布于 2022-09-12 01:46:20 字数 284 浏览 22 评论 0

    let a = new Promise(resolve=>resolve(1))
    let b = new Promise(resolve => resolve(a))
    console.info(a === b)           // false

    b = Promise.resolve(a)
    console.info(a === b)            // true

请问,为什么两个输出结果不一致?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

各自安好 2022-09-19 01:46:20

先说下===的底层原理:

=== 比较的原理是先进行类型判断再进行值的比较,同时这里对象的值实际上指的是其存储的指针


分析a === b

  1. 执行完
let a = new Promise(resolve=>resolve(1))
let b = new Promise(resolve => resolve(a))

a 和 b 分别指向了两个对象(promise对象)

  1. 再进行判断
console.log(a === b)

都是promise类型一致,然后进行值的判断。a 和 b分别指向了堆上存储的两个对象,可以理解为 a 存储的是指针0276GGHBC00,b 存储的是指针0276GGHBC01,显然两者不相等。

这篇文章对JS内存原理讲的很透彻,可以看下


promise.resolve当的参数是promise对象时,直接返回这个对象,否则返回一个新的promise对象

b = Promise.resolve(a) // 此时Promise.resolve(a)返回的还是原始对象a

相当于

b = a

所以此时 a 和 b 都指向 a 所指向的promise对象new Promise(resolve=>resolve(1))

九歌凝 2022-09-19 01:46:20

因为 === 对比的是对象的引用。

ab 是两个不同的 Promise 对象,因此第一次判断是 false

根据规范,Promise.resolve 的参数如果是一个 Promise,则直接返回该 Promise。

清风不识月 2022-09-19 01:46:20

它返回的是promise又不是primitive数据,肯定不一样了。

let a = 1;
const obj1 = { a };
const obj2 = { a };
obj1 === obj2; // false
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文