2012-12-29 210 views
2

可能重复:
JavaScript property access: dot notation vs. brackets?访问属性

<script>  
    var foo = {   
    name: 'kevin'   
    }; 

    document.write(foo.name); 
    document.write(foo['name']); 

    var cool = 'name'; 
    document.write(foo.cool); 

    document.write(foo[cool]);  
</script> 
  1. 为什么foo.cool返回我不确定哪里为foo[cool] returns me kevin
  2. cool如何在foo对象中实际引用我的名称属性。
+3

因为当对象属性是一个表达式时,使用'[]'表示法,就像变量'cool'(或者包含无法用'.'表示法的字符)。如果使用'.'表示法,则该属性不能是表达式的结果。 –

回答

4
  1. cool属性不上foo定义,因此foo.cool是未定义的。如果您的确输入了foo.name,则会返回kevin

  2. foo[cool]cool是你在它上面的行中定义的一个,因此它实际上是foo['name'],其定义和具有值kevin。由表达式计算结果为他们的名字property.name

  3. 间接:property[expr]

+0

但var cool ='name'是一个字符串变量。JS如何将它与只用[]符号调用的foo对象相关联。 – Kevin

+0

@凯文 - 它没有。您正在访问具有标签'name'的'foo'的属性,但正在传递包含该值的变量(即变量'cool'包含值'name')。 'name'是关联的。 – Oded

1

您可以访问属性要么...

  • 字面上他们的名字。

因此,如果表达式cool具有值'name',然后foo[cool]相同foo['name']foo.name

挡片还可以允许...

1)更复杂的表达式像foo["data_"+variable]轻松访问名为像data_something领域,
2)属性名称不属于简单的标识符,例如,你可以说foo["I'm long!"]

我希望这个解释能够为您增添亮点。

1

In var foo = {name:'kevin'};您将对象或字典存储到该变量...现在是键值对...因此您可以使用该键访问对象的值...

因为它是一个键值对。 ..你无法使用'。'来访问它。运营商...因为foo是不是一类... FOO的类型将是一个字典或对象......

因此,访问值,你需要使用[] paranthesis ...