我需要检测两个匿名函数是否相同。
在控制台中,为什么以下行返回false
?
(function() { alert("hello"); }) === (function() { alert("hello"); })
是否有比较运算符或其他方法来确定这些“功能”相同?
修改
人们要求使用这个。
用于删除先前已推入函数数组的函数。有关简化测试,请参阅http://jsfiddle.net/w6s7J/。
答案 0 :(得分:1)
(function() { alert("hello"); }) === (function() { alert("hello"); })
返回 false beacouse它是javascript中的不同对象。
(function() { alert("hello"); }).toString() === (function() { alert("hello"); }).toString()
返回 true ,因为它们是相同的字符串。
此外,函数对象具有name
属性,该属性返回函数的名称(但not works in IE):
var a = function b() {}
alert(a.name);//write b
答案 1 :(得分:1)
没有真正的方法来比较“功能”的2个不同的匿名函数。
您可以使用示例代码检查它们是否是同一个对象。
var func = function () {
alert('hello');
};
alert(func === func);
以上方法可行,因为您要检查两个对象是否相同。
唯一的比较方法是将它们作为字符串进行比较。
var func1 = function () {
alert("hello");
};
var func2 = function () {
alert('hello');
};
alert(func1.toString() === func2.toString());
糟糕!,它们在功能上是相同的,区别在于使用的引号,所以这会返回false。