Cita: Dos modos de hacer lo mismo me parecía raro (usar sintaxis de corchetes o de punto para añadir/acceder a una propiedad)...
mírale el lado útil. con la sintaxis de corchete puedes crear propiedades al vuelo, cosa que no puedes hacer con la sintaxis de punto. adicionalmente, con la sintaxis de corchete no estás limitado a la norma de identificadores válidos. es decir, la norma de que los identificadores (nombre de variables o funciones) deben comenzar por
A-Za-z_$. de hecho, incluso puedes hacer cosas más bizarra como usar valores distinto a los strings.
Código:
var literal = {'0cero': 'comienza por 0'};
literal["(*)"] = 'una propiedad extraña usando simbolos';
console.log(literal["0cero"], literal["(*)"]);
var weird = {};
weird[literal] = "el key o nombre de propiedad es un objeto";
console.log(weird[literal]);
recuerdo que por ahí hay un tema en que señale esta característica y creo tiene más ejemplos... pero no recuerdo cual tema fue.

no obstante, aclarar que funciona porque en realidad lo que sucede es que javascript convierte el dato a string y utiliza ese string como nombre para la propiedad. por ejemplo, en lugar
literal intenta pasarle otro objeto genérico.