如何解决为什么for ... in循环中的变量是字符串?
我正在使用for ... in循环记录值,我注意到for ... in循环(在这种情况下为i
)中的变量是一个字符串。
for (var i in ['a','b','c']) {
console.log(i,typeof i)
}
我在标题为“供以,供以和等待的语句”的部分中的ECMAScript specifications中进行了搜索,以获取与此有关的任何信息,但找不到与此有关的任何内容。 / p>
我的问题是,规范中是否与此有关,如果没有,为什么它是字符串?
解决方法
for..in调用EnumerateObjectProperties,它执行以下操作:
返回一个迭代器对象(26.1.1.2),其下一个方法将迭代O的可枚举属性的所有字符串值键。ECMAScript代码永远不能直接访问该迭代器对象。未指定枚举属性的机制和顺序,但必须符合以下指定的规则。
所有对象属性都是字符串或符号。甚至可以将设置和获取的数组属性视为数字,也可以将其解释为字符串(通过for..in
或其他Object.keys
属性枚举方法进行检索时,将它们解释为字符串)或Object.getOwnPropertyNames
)。您还可以看到[[OwnPropertyKeys]]()
,其中说:
返回的列表的每个元素的类型为String或Symbol。
例如,使用Array.prototype.push
,you can see:
5. For each element E of items,do:
a. Perform ? Set(O,! ToString(len),E,true).
分配属性总是会导致设置一个字符串或符号属性。 (请参见isPropertyKey
-如果Type(参数)为String,则返回true。如果Type(argument)为Symbol,则返回true。否则返回false。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。