2012-07-14 36 views
4

我一直在试着了解Javascript相等性。你能告诉我为什么以下行返回falseJavascript相等性

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

但你可以从下面的情况看<回报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 
+0

我无法想象这些函数实际上有一个明智的整理顺序。 – 2012-07-14 05:03:06

+0

@GregHewgill可能不会,但它仍然没有任何意义,当第一个返回“false”时,最后两行返回“true”... – alfasin 2012-07-14 05:04:08

+0

我认为函数具有排序顺序,因为函数a(){} “g”'返回'true'。 – scusyxx 2012-07-14 05:08:18

回答

5

你是比较使用<<=两个Object,他们实际上是用绳子,他们可以隐蔽相比。

"function a(){}" < "function a(){}"是错误的。

"function a(){}" <= "function a(){}"为真。

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

+0

那么为什么'函数a(){} ==函数a(){}'返回'false' – scusyxx 2012-07-14 05:10:15

+0

@odly请参阅我的编辑。 – xdazz 2012-07-14 05:13:32

+1

和我以为我永远不会看到这个问题的好答案... :) +1 – alfasin 2012-07-14 05:17:04

1

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

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

在另一方面,对象,数组和功能通过参考 相比。这意味着两个变量只有在将 指向同一个对象时才相等。

+0

你不回答这个问题... – alfasin 2012-07-14 05:03:14

+0

==只返回真/假值。 ===如果值/类型相同,则返回true/false。另外,当你针对函数运行一个相等运算符时,它指的是内存地址中的位置,这几乎毫无意义。 – Wulfram 2012-07-14 05:05:11

+0

这是一个不能回答问题的正确说法。 – alfasin 2012-07-14 05:06:37

0

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

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

这是因为每一个功能是不同的对象,为什么平等检查返回false。