检查对象是否包含 JavaScript 中的函数

目录

Check if an Object contains a Function in JavaScript

  1. 检查对象是否包含 JavaScript 中的函数
  2. 检查一个对象是否在 TypeScript 中有一个方法

检查对象是否包含 JavaScript 中的函数

使用 typeof 运算符检查对象是否包含函数,例如
typeof obj.sum === 'function'. typeof运算符返回一个字符串,指示值的类型。对于函数,运算符返回一个包含单词 function 的字符串。

索引.js
const obj = { sum: (a, b) => { return a + b; }, }; if (typeof obj.sum === 'function') { console.log('✅ the sum property points to a function'); } else { console.log("⛔️ the sum property DOESN'T point to a function"); } console.log(typeof obj.sum); // 👉️ "function" console.log(typeof obj.doesNotExist); // 👉️ "undefined"

我们使用
typeof
运算符来检查
sum对象的属性是否指向函数。

typeof运算符返回一个包含值类型的字符串。

如果我们语句中的相等性检查if通过,那么对象上的属性将指向一个函数。

以下是使用typeof运算符的更多示例。

索引.js
console.log(typeof {}); // 👉️ "object" console.log(typeof []); // 👉️ "object" console.log(typeof null); // 👉️ "object" console.log(typeof (() => {})); // 👉️ "function" console.log(typeof ''); // 👉️ "string" console.log(typeof 0); // 👉️ "number" console.log(typeof NaN); // 👉️ "number" console.log(typeof undefined); // 👉️ "undefined"
请注意,运算符的返回值始终包含在字符串中。

运算符返回箭头和命名函数的typeof字符串function

索引.js
console.log(typeof (() => {})); // 👉️ function console.log(typeof function () {}); // 👉️ function

从技术上讲,类的类型也是一个函数。

索引.js
console.log(typeof class A {}); // 👉️ function

类只是 JavaScript 中函数的语法糖。

但是,我们不能将类作为对象中的属性,因此我们的解决方案工作得很好。

在 TypeScript 中检查对象是否有方法

在 TypeScript 中检查一个对象是否有一个方法:

  1. 将特定方法标记为对象类型中的可选键。
  2. 用于typeof检查访问对象上的方法是否返回具有function类型的值。
  3. 如果typeof运算符返回true,则该方法存在。
索引.ts
interface Employee { name: string; salary: number; getSalary?: () => number; } const obj: Employee = { name: 'Alice', salary: 500, }; if (typeof obj.getSalary === 'function') { console.log(obj.getSalary()); } else { console.log('getSalary method does not exist on object'); }

请注意,我们使用问号将Employee类型中的方法设置为
可选

这意味着该getSalary属性可以具有值或者是返回 a 的方法 undefinednumber

我们使用
typeof
运算符来检查
getSalary属性是否是一个方法。

索引.ts
console.log(typeof function () {}); // 👉️ "function"

typeof运算符返回一个字符串,指示特定值的类型。

这在 TypeScript 中用作
类型保护。

索引.ts
interface Employee { name: string; salary: number; getSalary?: () => number; } const obj: Employee = { name: 'Alice', salary: 500, }; // 👇️ type is function or undefined obj.getSalary; if (typeof obj.getSalary === 'function') { // 👇️ type of obj.getSalary is function here console.log(obj.getSalary()); } else { console.log('getSalary method does not exist on object'); }

getSalary属性是可选的,因此它可以具有一个值
undefined或一个函数。

在我们的if声明中,我们检查特定属性是否具有函数类型,因此 TypeScript 知道它不可能undefinedif块中。

以下是使用typeof运算符的更多示例。

索引.js
console.log(typeof {}); // 👉️ "object" console.log(typeof []); // 👉️ "object" console.log(typeof null); // 👉️ "object" console.log(typeof (() => {})); // 👉️ "function" console.log(typeof ''); // 👉️ "string" console.log(typeof 0); // 👉️ "number" console.log(typeof NaN); // 👉️ "number" console.log(typeof undefined); // 👉️ "undefined"

请注意,运算符的返回值始终包含在字符串中。