javascript - 为什么这个 for 循环记录 "undefined"?

标签 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.logs 中显示“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'], 名字['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

关于javascript - 为什么这个 for 循环记录 "undefined"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32662379/

相关文章:

javascript - 类型错误 : OpenAIApi is not a constructor

javascript - jQuery:如何使用 ('copy' ,...)将数据复制到剪贴板

javascript - 从键数组和值数组创建对象

javascript - 原型(prototype)函数和json符号函数的区别?

javascript - 通过嵌套对象 JavaScript 计时递归迭代

javascript - 使用 Canvas 单独倾斜图像

javascript - 如果我的函数评估为 true,如何使我的确认语句发布状态,如果为 false,如何使确认语句发布状态?

javascript - 为什么 'this' 在箭头函数中引用时返回 'undefined' 而在匿名函数中调用时却不返回?

javascript - 为什么不建议将 JavaScript 的 For...In 循环用于数组?

javascript - 为什么这个不正确的 JavaScript 程序会产生正确的答案?