📌  相关文章
📜  如果对象看起来像 Promise,则返回 true 的 JavaScript 程序(1)

📅  最后修改于: 2023-12-03 15:24:59.890000             🧑  作者: Mango

判断对象是否为 Promise

在 JavaScript 中,我们可以通过 Promise 对象来管理异步操作和回调函数的执行。有时候,我们需要判断一个对象是否为 Promise 对象,以便做出相应的处理。本文将介绍如何写一个 JavaScript 程序来判断对象是否为 Promise。

实现方法

Promise 对象有一个 then 方法,而且在 ES6 中使用 Promise.resolve 方法可以将一个对象转为 Promise 对象。因此,我们可以通过以下方法来判断一个对象是否为 Promise 对象:

function isPromise(obj) {
  return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
}

上述方法用到了逻辑运算符 !!,它的作用是将值转换为布尔类型。如果该值为真,则转换后为 true;如果为假,则转换后为 false

该方法的逻辑为:

  1. 如果对象为空或不是对象或不是函数,则返回 false
  2. 如果对象具有 then 方法,则认为它是 Promise 对象,返回 true;否则返回 false
测试

下面是测试代码:

console.log(isPromise(null)); // false
console.log(isPromise(undefined)); // false
console.log(isPromise(123)); // false
console.log(isPromise('foo')); // false
console.log(isPromise({})); // false
console.log(isPromise([])); // false
console.log(isPromise(() => {})); // false

console.log(isPromise(Promise.resolve())); // true
const p = new Promise(() => {});
console.log(isPromise(p)); // true

测试结果:

false
false
false
false
false
false
false
true
true
总结

通过判断对象是否具有 then 方法,我们可以判断一个对象是否为 Promise 对象。这种方式可以方便地应用在各种场景,如判断一个函数返回值是否为 Promise 对象等。