This is an old question, but it seems to have been recently edited, and I don't think any of the previous answers really got to the heart of it.
Firstly, "Why language designers have chosen to forbid identifiers starting with number?" is not "Why it's not possible to access to array element with dot notation?" in other words. They are wholly different questions.
Dot notation is for accessing object members only. An array element is not an object member.
You could visualize an array like this:
array = {elements: ['element_1', 'element_2'], length: f(), push: f()...}
You can see that you would not be able to access 'element_1' using array.0
, even if numeric identifiers were allowed. Moreover, the elements 'member' is a special kind of affair that the interpreter handles only through bracket notation (to the best of my knowledge).
kieranpotts' answer seems to have been a perfectly serviceable but misunderstood one, to me - perhaps it was downvoted because the idea that elements are not properties was not explicit enough.