使用点表示法和括号来显示... in循环中的属性

时间:2014-09-11 12:42:43

标签: javascript

我见过一些以前被问到过的问题。但是,当我可以使用点/括号表示来显示对象的属性时,我仍然不太清楚,这就是我在这里问这个问题的原因。我有两个例子。在我的第一个例子中,console.log显示带点符号的对象属性,但是用括号显示未定义

<html>
<body>
<script>
var obj={
   name:'lol',
   age:10
}
console.log(obj[name]);
console.log(obj.name);
</script>
</body>
</html>

在我的第二个例子中,我使用for ... in方法迭代对象属性。在这种情况下,点符号不起作用,但是括号表示。但是如果console.log()键显示属性名称。如果是,那么为什么它有问题显示属性值?我的意思是如果键=== name这是一个属性,那么obj.key应该等同于obj.name 在我看来,不应该有任何问题表明它的价值。 这是第二个:

<html>
<body>
<script>
   var obj={
      name:'lol',
      age:10
      }
for(key in obj){
   console.log(key);
   console.log(obj.key);
}
</script>
</body>
</html>

1 个答案:

答案 0 :(得分:4)

在以下情况下,您必须使用方括号表示法:

  • 属性名称存储在变量
  • 属性名称包含标识符
  • 中不允许的字符

当您不需要按照上述规则使用方括号表示法时,通常认为使用点表示法是一种好的风格。


var name = "foo";
obj.foo === obj["foo"] === obj[name]; // All equivalent (but the middle one is generally considered to be poor style)

var other = "one-two";
obj[other] === obj["one-two"]; // Equivalent


// obj.one-two; would be "Subtract two from obj.one".
var obj = { one: 1 };
var two = 2;
(obj.one-two) === (obj.one - two) === -1;