from what I got, it's a very stupid interaction of different javascript language features.
Every object in JS has basic map functionality. Since version 1 of the language, you could always write things like:
var o = new Object();
o["foo"] = "bar";
o["foo"] // --> "bar"
However, this functionality is relatively limited: It only supports strings (and symbols) as keys and it interacts badly with other methods and properties which are part of the object. Hence why an explicit "Map" type was added to the language much later.
The problem is, Maps are also objects, so they still inherit the "old" map functionality in addition to the new functionality. Those two systems are completely independent, even though they act on the same object. So writing
mymap["foo"] = 1
and
mymap.set("foo", 1)
both store the mapping "foo" -> 1, but in completely different places. Only the second one will actually put it into the store of the map, while the first one will just add it as a generic object property.
You can see it when trying to retrieve the value again:
Yes the square brackets were just a typo. But maps do support float keys - you can try it yourself!
map = new Map();
map.set(1.2, 3.4);
log(typeof(map.keys().next().value));
That says the key is a number, and it's a floating point number. So what did they mean by "ECMAScript does not have maps where keys can be integers and neither can keys be floats"?
I think the GP was wrong there. JS maps absolutely do support float keys, it's just generally a bad idea to use them if you don't restrict yourself to integers.
But isn't this still a map that has float and integer keys? Why doesn't it count?