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

W3G*_*eek 5 javascript arrays oop loops object

首先,我想说我理论上很重要.我不喜欢抽象.我想在尝试使用它们之前知道它是如何工作的.我一直在寻找一个简单的理论来获取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" ???
}
Run Code Online (Sandbox Code Playgroud)

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

我试图考虑这个问题,因为for循环中的变量i有点像数组的索引.

这又是什么,它与我的要求相似?

var obj = { "one": 1, "two": 2, "three": 3 };
Run Code Online (Sandbox Code Playgroud)

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

jAn*_*ndy 4

我必须承认我并不完全理解这个问题,但我仍然尽力回答。对象几乎可以与哈希 -)相媲美。如您所知,它由标识符和存储在该标识符后面的值组成。

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

对于Array,在循环它时您只想接收一件有趣的事情,因为它的“”只是索引数字(实际上这里也是字符串,但这只是作为旁注)。但是,由于对象可以是任何内容,因此循环它们时会发生冲突。你想获取还是

这就是为什么会有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
}
Run Code Online (Sandbox Code Playgroud)