为什么{}<功能(){}?

时间:2011-11-14 01:38:56

标签: javascript operators logical-operators

当我在JavaScript中使用真值表时,我注意到以下评估为真:

var a, b, c;
a = {};
b = function(){};
c = a < b;
console.log(c);

为什么?

我只在Firefox中测试了这个,我确信我可以在ECMAScript 2.6.2规范中挖掘细节,但TBH我感觉很懒。

4 个答案:

答案 0 :(得分:17)

JavaScript类型强制使得比较基本上是

String({}) < String(function(){})

所以基本上你只是在做

"[object Object]" < "function (){}"

这是一个词典字符串比较。

答案 1 :(得分:8)

Javascript compares objects致电valueOf()toString() 由于两个操作数都没有valueOf()方法,因此它会比较toString() s。

({}).toString()[object Object] (function() { }).toString()function() { }

[小于f

答案 2 :(得分:4)

alert(({}))            -> [object Object]
alert((function(){}))  -> function () {}

[出现在f之前,因此({}) < (function () {})

是的,这太傻了。 ;)

答案 3 :(得分:0)

非常简单易用(内部都转换为字符串)这是因为在Javascript中

如果将对象与数字或字符串进行比较,JavaScript会尝试返回该对象的默认值。运算符尝试使用对象的valueOf和toString方法将对象转换为原始值,String或Number值。

因此,当比较两者时,使用内部Tostring方法将两个对象转换为字符串

    a.toString()
"[object Object]"

b.toString()
"function () { }"

因此b将大于a(更大的字符串) 这就是为什么b&gt;一个是真的