javascript - 从 for-in 循环获取属性名称背后的简单理论?

标签 javascript arrays oop object loops

首先,我想说我在理论上很厉害。我不喜欢抽象。在尝试使用它们之前,我想知道它们是如何工作的。我一直在到处寻找获取 for-in 循环的属性名称(而不是值)背后的简单理论。我将在代码中演示它,希望有人可以解释它是如何工作的……

var obj = { one: 1, two: 2, three: 3 }; // A basic object instantiated with 3 public properties.

for (var prop in obj) {
    console.log(prop); // logs "one", "two" and "three" ???
}

我认为它会将 prop 变量评估为 1、2 和 3,但它会记录实际的属性名称。我知道 obj[prop] 是评估这些属性的实际值的东西,但这对我来说就像一个开始。 prop 是存储另一个引用的引用?

我试图从 for 循环中的变量 i 有点像数组索引的 Angular 来考虑这个问题。

还有这是什么,它是否与我要问的相似?

var obj = { "one": 1, "two": 2, "three": 3 };

属性名称是字符串吗?......你不能说 var "string"= "Hello, World!";因为那是非法的。

最佳答案

我不得不承认我并不完全理解这个问题,但我会尽力回答。 对象散列(-)非常相似。如您所知,它由一个标识符和一个存储在该标识符后面的值组成。

在 ECMAscript 中,该标识符是对象 中的

对于数组,在循环遍历它时您只想接收到一件有趣的事情,因为它的“”只是索引数字(实际上这里也是 Strings,但这只是一个旁注)。但是,由于对象 keys 可以是任何东西,因此在循环它们时会发生冲突。您要获取还是

这就是为什么有 for-in 循环的原因。您正在遍历 并且使用该键您还可以访问背后的值。


但是 - 您并不是完全孤独的人。这就是为什么 ECMAscript Next 将为对象引入 for-of 循环,这会反转此逻辑。您将直接遍历值,而不是

var obj = { one: 1, two: 2, three: 3 };

for(var value of obj) {
    console.log(value); // 1, 2, 3
}

关于javascript - 从 for-in 循环获取属性名称背后的简单理论?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13528745/

相关文章:

javascript - 将图像加载到 localStorage 并将图像 src 设置到该位置

javascript - 如果我用 javascript 隐藏文本输入元素,其他 javascript 函数是否仍然可以访问输入到其中的值?

C:只打印一定数量字符的程序

c - 使用strtok分隔单词并删除, and ()

ios - 一个变量,一个类和两个相同的函数swift

oop - 关于纯 OO 的各种问题(在没有 ide 的情况下进行设置;教程;相关书籍)

javascript - 使用 Typeahead.js/Bloodhound.js 在远程和本地源之间切换

javascript - 查询没有列 'id' 的 sequelize 表

c - 是否可以访问文件中的特定字符串

c++ - C++ 对象成员数组的默认初始化?