на самом деле, это obj [выражение] против obj.identifier
первое всегда приводит к динамическому поиску во время выполнения, тогда как второе может и будет проверяться во время компиляции. Следовательно, он может генерировать ошибки во время компиляции, если obj запечатан (то есть не является динамическим) и не имеет свойства, соответствующего идентификатору. Кроме того, если свойство не является динамическим (то есть добавлено свойство динамического объекта во время выполнения), но определено в классе объектов, то эта информация используется для ускорения поиска.
Подводя итог: в отличие от obj [выражение], obj.identifier типобезопасен и значительно быстрее