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

JavaScript中for...in遍历字符串出现replaceAt属性的循环异常问题

问题原因及解决办法

核心原因是for...in循环会遍历对象的所有可枚举属性,包括原型链上的属性。你项目环境里的某段代码(第三方库、框架或自定义脚本)给String.prototype添加了名为replaceAt的可枚举方法,字符串作为对象,在for...in循环时就会把这个原型上的属性也遍历出来。

单独复现正常是因为干净的浏览器环境中,String.prototype默认没有replaceAt方法,循环只会遍历字符串自身的索引属性。

解决办法

  • 使用for...of循环,它专门用于遍历可迭代对象(比如字符串)的元素,不会涉及原型属性:
    let str = "hello.\n"
    for (let char of str) {
        console.log(char);
    }
    
  • 用传统for循环,通过字符串长度控制遍历范围:
    let str = "hello.\n"
    for (let i = 0; i < str.length; i++) {
        console.log(i);
        console.log(str[i]);
    }
    
  • 若必须用for...in,添加hasOwnProperty判断,只遍历自身属性:
    let str = "hello.\n"
    for (let i in str) {
        if (str.hasOwnProperty(i)) {
            console.log(i);
            console.log(str[i]);
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:25:01