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

为何parseInt对看似正常的数字字符串返回NaN?

问题原因及解决方法

核心原因

你看到的JSON里的"x""y"字符串,表面是数字,但实际包含了肉眼不可见的Unicode控制字符(比如右至左嵌入符U+202B、弹出方向格式化符U+202C这类)。这些字符会干扰JavaScript的数字解析逻辑,导致parseInt/Number等方法无法识别出有效数字,最终返回NaN。

验证方式

你可以把字符串拆成单个字符,打印它们的Unicode编码来确认:

const str = obj.x;
console.log(Array.from(str).map(c => `0x${c.charCodeAt(0).toString(16)}`));

执行后会看到除了数字对应的编码(比如0x31、0x32),还有额外的非数字编码,这些就是捣乱的隐藏字符。

解决办法

  1. 清理字符串再转数字
    用正则替换掉所有非数字和负号的字符,或者直接匹配常见的隐藏控制字符:
// 方案1:保留数字和负号,去掉其他所有字符
const cleanX = parseInt(obj.x.replace(/[^\d-]/g, ''), 10);
const cleanY = Number(obj.y.replace(/[^\d-]/g, ''));

// 方案2:精准移除常见的零宽/方向控制字符
const controlCharsRegex = /[\u200B-\u200D\uFEFF\u202B\u202C]/g;
const cleanX = parseInt(obj.x.replace(controlCharsRegex, ''), 10);
  1. 从源头避免
    如果这份JSON是其他系统生成的,要检查生成逻辑,确保输出的数字字符串是纯文本格式,没有额外的格式控制字符混入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:09:57