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
相关产品推荐
相关产品推荐

