为什么这个for循环记录“未定义”?

Why does this for loop log "undefined"?

本文关键字:未定义 记录 循环 for 为什么      更新时间:2023-09-26

我有了这个javascript对象,我想遍历并打印出它的每个属性值

代码如下:

var names = {
            "firstName":"Billy",
            "lastName":"John",
            "age":30
        };
for(var a in names){
    console.log(names.a);
}

和它控制台。记录"undefined" 3次

但是如果我这样做:

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

打印出Billy, John, 30。

如果我console.log names.firstName在循环外工作。并且考虑到在第一次循环执行时afirstName,它应该工作。

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

由于使用点符号(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

因为names没有.a属性。

a指的是一个值为属性的变量。

names[a]names.a不相等。

a是一个引用字符串的变量。

names.a期望在您的names对象中有一个名为a的键。

names[a]等于names.firstNamename.lastNamenames.age

如果你写:

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

然后循环:

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

将记录property a三次,明白吗?