function foo(){
console.log( function(){return 1} <= function(){return 1} );
}
foo();
以上代码打印&#34; true&#34;。它为&lt; =和&gt; =打印为true,对于所有其他运算符,它是&#34; false&#34;。
这里有什么诀窍?
答案 0 :(得分:3)
因为它没有比较返回的1
,所以它正在比较functions
。在函数上运行运算符时,它会隐式调用toString
。
至于==
,Dmitri很好地解释了toString
没有被调用,但它运行了一个对象比较,这将是假的,因为2个不同的对象永远不会相同。
以下是ECMA spec On关系运算符,它解释了它如何与比较运算一起运行。对于对象,使用instanceOf
。
答案 1 :(得分:2)
function(){return 1} <= function(){return 1}
将函数转换为基元。转换为原语的函数会对字符串中的代码进行求值(调用toString()
)
然后"function (){return 1}" <= "function (){return 1}"
对字符串执行较少或相等的比较,即true
。
在function(){return 1} == function(){return 1}
中,JavaScript比较函数对象。但由于这些是不同的情况,您将拥有false
。
您可以在this article中查看有关相等运算符的更多信息。
答案 2 :(得分:-1)
因为它总是比较1&lt; = 1,这是真的。如果你比较1&gt; = 1是相同的总是这样。但如果你比较1&gt; 1这是假的。