目录
Check if an Object contains a Function in JavaScript
检查对象是否包含 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 中检查一个对象是否有一个方法:
- 将特定方法标记为对象类型中的可选键。
- 用于
typeof
检查访问对象上的方法是否返回具有function
类型的值。 - 如果
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 的方法。 undefined
number
我们使用
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 知道它不可能undefined
在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"
请注意,运算符的返回值始终包含在字符串中。