微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么for ... in循环中的变量是字符串?

如何解决为什么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.pushyou 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 举报,一经查实,本站将立刻删除。