new Promise(resolve)和Promise.resolve
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
先说下
===
的底层原理:===
比较的原理是先进行类型判断再进行值的比较,同时这里对象的值实际上指的是其存储的指针分析
a === b
a 和 b 分别指向了两个对象(promise对象)
都是
promise
类型一致,然后进行值的判断。a 和 b分别指向了堆上存储的两个对象,可以理解为 a 存储的是指针0276GGHBC00
,b 存储的是指针0276GGHBC01
,显然两者不相等。promise.resolve
当的参数是promise
对象时,直接返回这个对象,否则返回一个新的promise
对象相当于
所以此时 a 和 b 都指向 a 所指向的promise对象
new Promise(resolve=>resolve(1))
。因为
===
对比的是对象的引用。a
和b
是两个不同的Promise
对象,因此第一次判断是false
。根据规范,
Promise.resolve
的参数如果是一个 Promise,则直接返回该 Promise。它返回的是promise又不是primitive数据,肯定不一样了。