javascript中的函数相等
JS引擎实际上如何比较对象(如函数声明)是否相等javascript中的函数相等,javascript,node.js,Javascript,Node.js,JS引擎实际上如何比较对象(如函数声明)是否相等 var f1 = function(){}; var f2 = function(){}; console.log(f1 === f2); //false 为了确定对象引用不同,幕后实际发生了什么?是比较内存位置吗?函数是对象。 对象的不同实例永远不会相等(或不严格) 指针应用的严格相等: var a = b = {}, c = {}; console.log(a === b, a === c); // true false =检查值是否
var f1 = function(){};
var f2 = function(){};
console.log(f1 === f2); //false
为了确定对象引用不同,幕后实际发生了什么?是比较内存位置吗?函数是对象。对象的不同实例永远不会相等(或不严格) 指针应用的严格相等:
var a = b = {}, c = {};
console.log(a === b, a === c); // true false
=
检查值是否相等
=
检查值与变量类型或返回类型是否相等
var foo = function() {
a = 1;
};
var bar = function() {
a = 1;
};
alert(foo.toString() == bar.toString());
这将返回true。它们也从来不是非严格相等的。@Pointy,我只是不确定
toString类似于
-的方法,但似乎是真的。=)如果您不希望看到new Object()===new Object()
,那么为什么您希望看到new Function()===new Function()
?刚才看到了您的编辑。在坚果壳中,是的,它是在比较内存位置。是的,但你只是比较翻译的string
值,而不是实际对象本身。@Mike是对的。这与OP的问题无关。此外,您可以通过删除分配给globala
Hm的任务来优化您的代码,现在我明白为什么会在这里给出这个答案。它只是演示了一种通过代码比较函数的技巧(但并不总是正确的)foo.toString().replace(/\s+/g',)
在某些情况下可能更好。@Mike是的,我比较了字符串值。两个对象存储在两个不同的位置。所以,当我们试图比较时,实际上是在比较两个不同的内存位置,它们总是不同的。若它们指向同一个位置,那个么只有结果才是真的var foo=function(){a=1;};var-bar=foo;alert(foo==bar)`函数在Javascript中没有参数和返回类型。