对于In循环,为什么不能通过obj.property访问到属性值?

For In loop, why property value can't be accessed through obj.property?

var ni = {'hello': 23, 'he':'h', hao: 45};
for( var propertyName in ni) {
    console.log(ni[propertyName])  //23,'h',45
    console.log(ni.propertyName)   // undefined 3 times?
}

ni.propertyName 在这里不起作用的原因是什么?

ni.propertyName 等同于 ni["propertyName"]:它获取 属性 字面上命名为 "propertyName" 的值。另一方面,ni[propertyName] 使用您的 propertyName 变量进行查找。

ni.propertyName 是引用 属性 中名为 propertyName 的静态代码(不存在)。注意这等同于 ni["propertyName"].

ni[propertyName] 动态索引到 ni 以查找以 propertyName.[=17 命名的 属性 =]