在以下情况中解释> =和< =运算符的行为

时间:2016-05-10 16:47:29

标签: javascript comparison operators

function foo(){
console.log( function(){return 1} <= function(){return 1} );
}
foo();

以上代码打印&#34; true&#34;。它为&lt; =和&gt; =打印为true,对于所有其他运算符,它是&#34; false&#34;。

这里有什么诀窍?

3 个答案:

答案 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这是假的。