Properties are either accessed through the dot notation name.property or through the bracket notation name["property"]. The syntactic notions are:
MemberExpression . IdentifierName
CallExpression . IdentifierName
and
MemberExpression [ Expression ]
CallExpression [ Expression ]
Their behaviour is identical!
All four productions are evaluated like this:
function evaluate(MemberExpression [ Expression ]) {
var baseReference = evaluate(MemberExpression);
var baseValue = GetValue(baseReference);
var propertyNameReference = evaluate(Expression);
var propertyNameValue = GetValue(propertyNameReference);
CheckObjectCoercible(baseValue);
var propertyNameString = ToString(propertyNameValue);
var strict = global.arrExecutionContexts[global.arrExecutionContexts.length-1].strict;
return new Reference(baseValue, propertyNameStriong, strict);
}
For CallExpression the CallExpression is evaluated instead. For dot access the string value for IdentifierName is resolved and stored in propertyNameString.
There is no significant difference in speed between accessing a property through dot or bracket. This changes all the time and differs between implementations. It all depends on optimization. Assume no difference to be safe. There is no difference in behaviour either. Consider it best practice to use dot notation except when it would not be valid or when the accessed property is dynamic (not known beforehand).