首先,我想说我在理论上很厉害。我不喜欢抽象。在尝试使用它们之前,我想知道它们是如何工作的。我一直在到处寻找获取 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/