Only thing I am not sure about is the focus on "===" - I think it is a pain and fails in too many instances to do what the programmer would expect.
Apart from that, I agree.
Plus, NaN returns a generated object, so that result is expected
({}) !== ({})
'[object Object]' == {}