Bracket notation has nothing to with arrays, it's just another way to access properties. In fact, the reason why we can only use bracket notation for arrays is because of the evaluation rules: To use dot notation, the property name must be a valid identifier name.
Or simply put:
You can only use dot notation if the property name would be a valid variable name or a reserved word.
And -1
doesn't fall in that category (you can't do var -1 = 'foo';
for example).
Examples for invalid identifier names:
0foo
, -foo
, &bar
anything that doesn't start with a letter, _
or $
foo-bar
, foo+bar
, foo bar
anything that contains something that is not a letter, a digit, _
or $
(or fall into specific unicode ranges, see the spec).
However, using reserved words is possible, even though they can't be used as variables:
foo.if // valid
var if = 42; // invalid