为什么{} <function(){}?

zzz*_*Bov 6 javascript operators logical-operators

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

var a, b, c;
a = {};
b = function(){};
c = a < b;
console.log(c);
Run Code Online (Sandbox Code Playgroud)

为什么?

我只在Firefox中对此进行了测试,我确信我可以在ECMAScript 2.6.2规范中挖掘细节,但TBH我感觉很懒.

Dav*_* Hu 17

JavaScript类型强制实质上是比较

String({}) < String(function(){})
Run Code Online (Sandbox Code Playgroud)

所以基本上你只是在做

"[object Object]" < "function (){}"
Run Code Online (Sandbox Code Playgroud)

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

  • 见[ECMA-262](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf),第11.8.5节 (5认同)
  • 或者[这个11.8.5](http://es5.github.com/#x11.8.5)如果你不想浏览PDF. (4认同)

SLa*_*aks 8

Javascript 通过调用或比较对象. 由于两个操作数都没有方法,因此它将比较s.valueOf()toString()
valueOf()toString()

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

[小于f.