Javascript 为什么循环日志会出现这种情况;未定义的“;?

Javascript 为什么循环日志会出现这种情况;未定义的“;?,javascript,javascript-objects,for-in-loop,Javascript,Javascript Objects,For In Loop,所以我有这个javascript对象,我想循环并打印出它的每个属性值 代码如下: var names = { "firstName":"Billy", "lastName":"John", "age":30 }; for(var a in names){ console.log(names.a); } 并且它console.log“undefined”3次 但如果我这样做: for(var a i

所以我有这个javascript对象,我想循环并打印出它的每个属性值

代码如下:

var names = {
            "firstName":"Billy",
            "lastName":"John",
            "age":30
        };

for(var a in names){
    console.log(names.a);
}
并且它console.log“undefined”3次

但如果我这样做:

for(var a in names){
    console.log(names[a]);
}
它打印出比利,约翰,30岁

如果我在循环外输入console.log
names.firstName
,它就会工作。并且考虑到在第一个循环执行期间,a是
firstName
,它应该工作

为什么会发生这种情况?谢谢。

如果您写了:

var names = {
            "a":"property a",
            "firstName":"Billy",
            "lastName":"John",
            "age":30
        };
然后循环:

for(var a in names){
    console.log(names.a);
}
将属性a记录三次,明白吗?

如果您写:

var names = {
            "a":"property a",
            "firstName":"Billy",
            "lastName":"John",
            "age":30
        };
然后循环:

for(var a in names){
    console.log(names.a);
}

属性a
记录三次,明白吗?

因为
名称
没有
.a
属性
a
指的是其值为属性的变量。

因为
名称
没有
.a
属性
a
是指其值为属性的变量。

名称[a]
名称。a
不等效

a
是引用字符串的变量

names.a
在您的names对象中需要一个名为
a
的键


姓名[a]
等同于
姓名中的每一个。firstName
姓名。lastName
姓名。age
姓名[a]和
姓名。a
不等同

a
是引用字符串的变量

names.a
在您的names对象中需要一个名为
a
的键


名称[a]
等同于
名称、firstName
名称、lastName
名称、age
,因为使用点符号(
名称.a
)访问对象上的属性
a
,因此该属性未定义

当使用括号表示法时,
names[a]
将对变量求值,语句如下:
names['firstName']
names['lastName']

通常,在访问属性时总是使用点符号,但在您的情况下,因为需要使用变量的名称访问属性,所以需要使用括号符号

使用括号表示法的另一种情况是,当您需要访问一个名称不能使用点表示法写入的属性时。考虑这一点:

var a = { "my-special property": 1 };
// Try to access it via dot notation:'
console.log(a.my-special property); // SyntaxError
// But with bracket notation:
console.log(a['my-special property']); // 1

由于使用点符号(
names.a
)访问对象上的属性
a
,因此此属性未定义

当使用括号表示法时,
names[a]
将对变量求值,语句如下:
names['firstName']
names['lastName']

通常,在访问属性时总是使用点符号,但在您的情况下,因为需要使用变量的名称访问属性,所以需要使用括号符号

使用括号表示法的另一种情况是,当您需要访问一个名称不能使用点表示法写入的属性时。考虑这一点:

var a = { "my-special property": 1 };
// Try to access it via dot notation:'
console.log(a.my-special property); // SyntaxError
// But with bracket notation:
console.log(a['my-special property']); // 1

因为属性名的工作方式。因为属性名的工作方式。