2014-09-11 28 views
-1

我已经看到一些以前提出的问题。但它仍然不是很清楚,当我可以使用点/括号表示来显示对象的属性,这就是为什么我在这里问这个question.Here我有两个例子。在我的第一个例子中的console.log显示对象与点符号性质,但表示不确定与支架使用点符号和括号来显示里面的属性...在循环中

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

在我的第二个例子我使用了。 ..in方法迭代对象属性。在这种情况下,点符号不起作用,但括号表示法确实如此。但如果console.log()键显示属性名称。如果是这样,那么为什么它有问题显示属性值我的意思是如果key === 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> 
+2

'OBJ [名称]'=>'OBJ [ “名称”]'名这里是一个字符串不是一个对象或可变的。 – melancia 2014-09-11 12:44:23

回答

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; 
+0

很好的解释.... :) ..我没有得到第二个例子,但你可以解释一下吗? – 2014-09-11 12:53:27

+0

定义“第二个例子”。你不了解它吗? – Quentin 2014-09-11 12:54:12

+0

“obj.one-two;将是”从obj.one中减去两个“...你的意思是它等价于obj.one-obj.two ?? – 2014-09-11 12:59:09