我一直在努力理解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
答案 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的原因。