興味深い質問:
ここで実際に関係するのは、[]
演算子と .
演算子に関連する知識です。
関連するルールと URL を添付します。ご自身で学習してください:
MemberExpression : MemberExpression [式]
baseReference を MemberExpression の評価結果とします。
baseValue を GetValue(baseReference) にします。
ReturnIfAbrupt(baseValue).
propertyNameReference を Expression の評価結果にします。
propertyNameValue を GetValue(propertyNameReference) にします。
ReturnIfAbrupt(propertyNameValue).
bv を RequireObjectCoercible(baseValue) とします。
ReturnIfAbrupt(bv).
propertyKey を ToPropertyKey(propertyNameValue) にします。
ReturnIfAbrupt(propertyKey).
評価される構文プロダクションによって一致するコードが strict モードのコードである場合は、strict を true にし、そうでない場合は strict を false にします。
基本値が bv、参照名が propertyKey、厳密参照フラグが strict である Reference 型の値を返します。
MemberExpression : MemberExpression .IdentifierName
baseReference を MemberExpression の評価結果とします。
baseValue を GetValue(baseReference) にします。
ReturnIfAbrupt(baseValue).
bv を RequireObjectCoercible(baseValue) とします。
ReturnIfAbrupt(bv).
propertyNameString を IdentifierName の StringValue にします
評価される構文プロダクションによって一致するコードが strict モードのコードである場合は、strict を true にし、そうでない場合は strict を false にします。
基本値が bv、参照名が propertyNameString、厳密参照フラグが strict である Reference 型の値を返します。
CallExpression : CallExpression [式]
含まれる CallExpression がステップ 1 で評価される点を除き、 MemberExpression : MemberExpression [Expression ] とまったく同じ方法で評価されます。
CallExpression : CallExpression .IdentifierName
- ECMAScript 2015 #sec-property-accessors
含まれる CallExpression がステップ 1 で評価される点を除き、 MemberExpression : MemberExpression . IdentifierName とまったく同じ方法で評価されます。
実際、これは Object toString の問題です。