JavaScript objects cannot be implemented purely on top of hash maps.
Try this in your browser console:
var foo = {
a: true,
b: true,
z: true,
c: true
}
for (var i in foo) {
console.log(i);
}
...and you'll recieve them back in insertion order, which is de facto standard behaviour.
Hash maps inherently do not maintain ordering, so JavaScript implementations may use hash maps somehow, but if they do, it'll require at least a separate index and some extra book-keeping for insertions.
Here's a video of Lars Bak explaining why v8 doesn't use hash maps to implement objects.