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
请问,为什么两个输出结果不一致?
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
请问,为什么两个输出结果不一致?
因为 ===
对比的是对象的引用。
a
和 b
是两个不同的 Promise
对象,因此第一次判断是 false
。
根据规范,Promise.resolve
的参数如果是一个 Promise,则直接返回该 Promise。
它返回的是promise又不是primitive数据,肯定不一样了。
let a = 1;
const obj1 = { a };
const obj2 = { a };
obj1 === obj2; // false
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答856 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
先说下
===
的底层原理:===
比较的原理是先进行类型判断再进行值的比较,同时这里对象的值实际上指的是其存储的指针分析
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))
。