如何获取存储在数组中的函数的索引?以下代码返回-1
var myArray = [ function(){console.log('fct1')} ];
myArray.indexOf( function(){console.log('fct1')} );
更多细节:
我正在使用jQuery委托事件。每个事件都有一个或多个要回调的回调函数。我不可能知道这些功能是什么,因为它们没有预先编码。每个回调函数都将存储在一个数组中。当添加一个新的回调函数时,我想验证它是否已经在数组中,以避免重复,这些重复都将被事件调用。
答案 0 :(得分:1)
JavaScript中的任何对象都不等于类似的东西,除了它本身。
var func = function() {
console.log('fct1')
};
console.log(Object.prototype.toString.call(func));
# [object Function]
由于函数也是JavaScript中的对象,因此您无法使用另一个函数 object 搜索函数 object 。
为了能够获得匹配,您需要使用相同的函数对象,例如
var func = function() {
console.log('fct1')
};
var myArray = [func];
console.log(myArray.indexOf(func));
# 0
答案 1 :(得分:1)
这是由于多次引用而发生的 您声明的每个函数都有不同的引用,并且不等于另一个 这就是indexOf无法识别它的原因。 试试这个:
var func = function(){console.log('fct1')};
var myArray = [func];
alert(myArray.indexOf(func)); // will alert 0.