gpt4 book ai didi

javascript - 检查变量是否为函数的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-05 02:58:00 25 4
gpt4 key购买 nike

我已经通过多种方法来检查一个变量是否是一个函数,但我无法弄清楚优点和缺点,使用哪种方法以及为什么。

typeof 的情况下,是否存在我的比较可能失败的极端情况?

1) function isFunction(functionToCheck) {
返回 functionToCheck && {}.toString.call(functionToCheck) === '[object Function]'; }

2) typeof functionToCheck === '函数'

3) functionToCheck.constructor === 函数

最佳答案

在一个完美的世界中,所有这些都应该返回相同的值。

const functionToCheck = () => {};


console.log(isFunction(functionToCheck));
console.log(typeof functionToCheck === 'function');
console.log(functionToCheck.constructor === Function);
console.log(functionToCheck instanceof Function);


function isFunction(functionToCheck){
return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
}

在现实世界中,它们的差异可能很大。

const functionToCheck = () => {};

// Altering `.toString()` function by some third-party code
Object.prototype.toString = function(){
return '[ABCDEFG]';
}

// Mistake of programmer
functionToCheck.constructor = HTMLElement;

// Having a global scope variable named `Function` by some third-party code
window.Function = class ABC {};


console.log(isFunction(functionToCheck));
console.log(typeof functionToCheck === 'function');
console.log(functionToCheck.constructor === Function);
console.log(functionToCheck instanceof Function);


function isFunction(functionToCheck){
return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
}

如您所见,我可以自由更改函数和构造函数,进而更改您期望的结果。

最安全的方法是始终使用typeof 来检查函数,因为它的结果不能以任何方式改变。

关于javascript - 检查变量是否为函数的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59466135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com