JavaScript 两个对象大小比较的机制？
偶然见看到的一个关于类型转换的题目：
对象 ab 是两个字面量函数，在进行比较的时候，可以发现大小和相等的比较结果都是 `false`
```
var a = {b: 42};
var b = {b: 43};
```
```
a < b; //false
a == b; //false 
a > b; //false

a <= b; //true 
a >= b; //true 
```
在这个过程之，a 和 b 比较的时候，到底比较的是什么？为什么 <=> 三个运算符都是 false。？
为什么 `a<=b` 是 true？
`a<=b == true` 是因为 JS 计算的是 `!(a>b)` 吗？
ES 规定如此。
`==`、`!=` 不说了，基础问题了；说下 `>`、`<` 这种吧，最后都会转换为数值形式做比较。
首先尝试调用对象的 `Symbol.toPrimitive` 方法得到原始值。
如果没有这个方法就再尝试调用 `valueOf`。
经过以上转换后，如果两边都是 `string`，则按 Unicode 逐位比较；否则，都强转成 `number` 比较。
`Object` 强转后就变成了 `NaN`。`NaN` 是个特殊的 `number`，它跟任意数（包括它自己）做任何比较运算，恒为 `false`。
至于 `>=`、`<=` 你说的对，确实是取反。
P.S. 完整讲述可以自己搜索一下 ECMA-262 文档中关于 Abstract Relational Comparison 的相关定义：https://tc39.es/ecma262/#sec-abstract-relational-comparison