Jam*_*ron 22 javascript equality function
如何才能对bar和foo的平等进行积极的测试?
foo = function() {
a = 1;
};
bar = function() {
a = 1;
};
if (foo === bar) alert('baz');
if (foo == bar) alert('qux');
Run Code Online (Sandbox Code Playgroud)
以上条件都是错误的.
更新 - 根据要求我需要测试功能相等性的原因
我正在构建一个发布/订阅框架,需要传递回调以取消订阅主题.
Ale*_*pin 26
您可以通过比较调用它们的结果来检查两个函数的内容是否完全相同toString
var foo = function() {
a = 1;
};
var bar = function() {
a = 1;
};
alert(foo.toString() == bar.toString());?
Run Code Online (Sandbox Code Playgroud)
但是,如果只有一个不同的角色,那将会失败.另一方面,检查两个函数是否做同样的事情几乎是不可能的.
pol*_*.ph 20
问题在于功能上存在不同的平等概念.
trueiff两个名称指向同一地址.当你指定一个时,这是一个问题bar = foo.JavaScript中使用引用相等性.toSource目前(截至2014年)仅在Firefox中可用,因为它不是W3C标准化的.所以,照顾你认为平等的东西.
您可以测试两个变量是否引用完全相同的函数对象,并且可以将函数转换为字符串并查看它们是否真的完全相同,但是尝试确定两个函数是否执行完全相同的操作会有点困难更难,或者可能更难。
通过缩小器运行一对函数会很有趣,因为缩小器会进行大量的静态分析。