我见过一些以前被问到过的问题。但是,当我可以使用点/括号表示来显示对象的属性时,我仍然不太清楚,这就是我在这里问这个问题的原因。我有两个例子。在我的第一个例子中,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>
答案 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;