Gal*_*105 4 javascript loops language-specifications for-in-loop
我使用 for...in 循环来记录值,我注意到 for...in 循环中的变量(i在这种情况下为 )是一个字符串。
for (var i in ['a', 'b', 'c']) {
console.log(i, typeof i)
}Run Code Online (Sandbox Code Playgroud)
我在标题为“for-in、for-of 和 for-await-of 语句”的部分搜索了ECMAScript 规范,以获取有关此内容的任何信息,但找不到任何有关此内容的信息。
我的问题是,规范中是否有关于此的任何内容,如果没有,为什么它是一个字符串?
for..in调用EnumerateObjectProperties,它执行:
返回一个 Iterator 对象 (26.1.1.2),其 next 方法迭代O的可枚举属性的所有字符串值键。 ECMAScript 代码永远无法直接访问迭代器对象。枚举属性的机制和顺序没有指定,但必须符合下面指定的规则。
所有对象属性都是字符串或符号。甚至可以像数字一样设置和检索的数组属性也被解释为字符串(并在通过for..in或其他属性枚举方法(如Object.keys或Object.getOwnPropertyNames)检索时作为字符串检索)。你还可以看到[[OwnPropertyKeys]](),它说:
返回的 List 的每个元素的 Type 是 String 或 Symbol。
例如,使用Array.prototype.push,您可以看到:
5. For each element E of items, do:
a. Perform ? Set(O, ! ToString(len), E, true).
Run Code Online (Sandbox Code Playgroud)
属性分配总是导致设置一个字符串或符号的属性。(请参阅isPropertyKey-如果 Type(argument) 为 String,则返回 true。如果 Type(argument) 为 Symbol,则返回 true。否则返回 false。