Javascript square brackets have four semantics
Semantics 1, declare array
// Add an attribute name to obj. name is a legal identifier, that is, it can also be defined through obj.name
obj['name'] = 'jack';
// Add an attribute 2a to obj. 2a is not a legal identifier (cannot start with a number) and cannot be defined by obj.2a
obj['2a'] = 'test';
obj['name']; // --> jack
obj['2a']; // --> test (cannot be obtained through obj.2a)