4

我一直在尝试理解 Javascript 的相等性。您能告诉我为什么以下行返回false吗?

alert((function a(){}) == (function a(){})) // false

但是从下面的例子中可以看出return but <returns ,这意味着应该 return但它是。你有什么想法,为什么?false<=true==truefalse

alert((function a(){}) < (function a(){})) // false
alert((function a(){}) > (function a(){})) // false
alert((function a(){}) <= (function a(){})) // true
alert((function a(){}) >= (function a(){})) // true
4

3 回答 3

5

您正在使用<,比较两个对象<=,并且实际上将它们与可以转换为的字符串进行比较。

"function a(){}" < "function a(){}"是假的。

"function a(){}" <= "function a(){}"是真的。

编辑: 为什么(function a(){}) == (function a(){})返回 false 是因为您与 比较相同类型==,所以它们不需要转换为字符串或数字来比较,它们是两个不同的对象。

于 2012-07-14T05:08:49.153 回答
1

一个鲜为人知的事实是 Javascript 相等运算符实际上是 === 而不是 ==。在函数上运行比较运算符时,您是在比较引用的值(内存中的位置)而不是函数本身。由于函数都是独立的对象,== 不会返回 true。

来自“Javascript - 权威指南” http://docstore.mik.ua/orelly/webprog/jscript/ch05_04.htm

另一方面,对象、数组和函数通过引用进行比较。这意味着两个变量只有在它们引用同一个对象时才相等。

于 2012-07-14T05:01:56.567 回答
0

如果我们测试函数不相等,我们就会得到正确的结果。

alert((function a(){}) != (function a(){})) //true

这是因为每个函数都是不同的对象,以及相等检查返回 false 的原因。

于 2012-07-14T05:18:16.010 回答