It's actually in the documentation
The Object constructor creates an object wrapper for the given value. If the value is null or undefined, it will create and return an empty object, otherwise, it will return an object of a Type that corresponds to the given value. If the value is an object already, it will return the value.
As you already know, two objects are never the same
{} == {} // false
But when you pass an object to the Object constructor, it returns that exact same object, not a new one.
var b = {};
b === Object(b); //true
Here you pass the same object to the Object constructor that you're comparing agains, and the Object constructor will return that same object, and comparing an object against itself returns true
.
In other words, the above is the same as b === b
.
Moving on to this
b === Object({}); //false
here you're passing in an empty new object, that object will be returned, but it will never be the same object as b
, and two different objects are never equal, hence false