Javascript平等

时间:2012-07-14 04:59:34

标签: javascript

我一直在努力理解Javascript的平等性。你能否告诉我为什么以下一行返回false

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

但正如您从以下案例中可以看到<返回false<=返回true,这意味着==应该返回true但它是false。你知道吗,为什么?

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

3 个答案:

答案 0 :(得分:5)

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

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

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

修改 的 为什么(function a(){}) == (function a(){})返回false是因为您与==比较相同的类型,因此它们不需要转换为字符串或数字进行比较,它们是两个不同的对象。

答案 1 :(得分:1)

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

来自“Javascript - The Definitive Guide”http://docstore.mik.ua/orelly/webprog/jscript/ch05_04.htm

  

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

答案 2 :(得分:0)

如果我们测试函数不相等,我们就会成真。

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

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