对于普通的(“Native”)JavaScript 对象,其中属性名称是有效标识符,表达式x.y
总是x["y"]
在语义上等价。
主机对象是否保证了这种等效性?
宿主环境提供的 [..an] 对象,用于完成 ECMAScript 的执行环境。
如果没有,是否有明显的例外?(在 Cocoon、Crosswalk、IE 等中?)
特别是我对 Window ( window
) 和其他 DOM 对象感兴趣;以及预期行为是否存在任何已知的“例外”,或者是否存在任何可能的环境。
对于普通的(“Native”)JavaScript 对象,其中属性名称是有效标识符,表达式x.y
总是x["y"]
在语义上等价。
主机对象是否保证了这种等效性?
宿主环境提供的 [..an] 对象,用于完成 ECMAScript 的执行环境。
如果没有,是否有明显的例外?(在 Cocoon、Crosswalk、IE 等中?)
特别是我对 Window ( window
) 和其他 DOM 对象感兴趣;以及预期行为是否存在任何已知的“例外”,或者是否存在任何可能的环境。
它应该是相同的。从Ecma-262 版本 5.1的第 11.2.1 节(属性访问器)中,我们有:
属性通过名称访问,使用点符号:
MemberExpression . IdentifierName CallExpression . IdentifierName
或括号符号:
MemberExpression [ Expression ] CallExpression [ Expression ]
点符号通过以下句法转换来解释:
MemberExpression . IdentifierName
其行为与
MemberExpression [ <identifier-name-string> ]
同样地
CallExpression . IdentifierName
其行为与
CallExpression [ <identifier-name-string> ]