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

JavaScript使用String.prototype.substring时字符串截断问题修复

JavaScript setDataAt 方法字符串截断问题排查

问题现象

使用JavaScript实现指定位置替换字符串的自定义方法时遇到异常:我编写了一个包含setDataAt方法的类,最初的实现代码如下:

setDataAt(pos, value) {
    this.#data = this.#data.substring(0, pos)+value+this.#data.substring(pos+1);
}

实际调用方法时数据出现截断,仿佛代码中+this.#data.substring(pos+1);的逻辑完全没有生效。
典型异常样例:如果对象obj的私有属性#data初始值为"Hello world",执行obj.setDataAt(5, '.')后,#data的实际值为"Hello.",和预期结果"Hello.world"不符。

排查过程补充

  • 单独抽离上述核心代码片段直接运行时无法复现异常,代码逻辑可正常输出预期结果,只有在网页场景中调用该方法时才会触发截断问题。

根因与修复方案

最终定位到问题根因:网页场景中传入方法的pos参数并非整数类型,而是字符串类型。由于substring方法对非数值类型参数的解析规则和整数参数存在差异,最终导致后半段字符串截取失效。
修复方式:在方法内对pos参数做整数类型转换,将所有位置引用的pos替换为parseInt(pos)处理后的值即可,修正后的代码如下:

setDataAt(pos, value) {
    const validPos = parseInt(pos);
    this.#data = this.#data.substring(0, validPos) + value + this.#data.substring(validPos + 1);
}

问题定位过程得到了@Nick_Parsons 的帮助。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:33:26