You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JavaScript for...in循环遍历字符串出现异常结果的原因

字符串用for...in遍历出现额外属性的问题

问题

我创建了一个字符串变量:

var str = '123a'

为测试使用for...in循环遍历该字符串的效果,我执行了以下代码:

for (chars in str) {console.log(chars)}

但输出结果却包含:

0
1
2
3
d
defaultMessage
format

请问其中的“d”、defaultMessage、format是什么?为何for...in循环处理字符串会出现这种情况?(注:测试环境为Chrome浏览器控制台)

回答

这是因为for...in循环的核心特性:它会遍历对象所有可枚举的属性,包括从原型链继承来的属性,而不只是字符串自身的索引。

  • d、defaultMessage、format都是额外添加到String.prototype上的可枚举属性。字符串在JavaScript中属于包装对象,会隐式继承String.prototype的属性,所以for...in会把这些外来属性也纳入遍历范围。这些属性大概率是你之前在控制台运行过的脚本、浏览器插件,或是第三方注入的代码添加的。
  • for...in本来就不是为数组、字符串这类类数组结构设计的,它的目标是遍历普通对象的键。如果只想遍历字符串的字符索引,建议用for循环、for...of循环,或者Array.from(str).forEach()这类方法,它们只会处理字符串自身的索引,不会读取原型链上的额外属性。

举个直观的例子,手动给原型加属性后,就能复现你遇到的情况:

String.prototype.d = '自定义属性';
var str = '123a';
for (chars in str) {console.log(chars);}
// 输出会包含0、1、2、3、d

内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:53:15