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

eval()遇含小数对象键触发Unexpected number错误原因排查

为什么对象键含小数会触发「Unexpected number」错误?

这个错误本质是JavaScript的语法解析规则导致的,咱们结合你的业务场景一步步拆解:

  1. 核心原因:对象属性的访问语法限制
    JavaScript里用点语法(比如obj.key)访问对象属性时,属性名必须符合「标识符命名规则」——只能以字母、下划线_或美元符号$开头,后续可跟字母、数字、下划线或美元符号。
    但如果属性名是包含小数点的字符串(比如"62.5th"),点语法就彻底失效了:解析器看到obj.62.5th时,会先把62识别为数字,后面的.会被当成是访问数字属性的语法(比如123.toString()),但紧接着的5th完全不符合语法逻辑,直接触发「Unexpected number」的语法错误。

  2. 对应你的业务场景
    前端传入的62.5th这类百分位数据,封装成对象后对应的键是类似"62.5th"的字符串。如果你的映射处理代码里误用了点语法访问这类键,就会触发报错。

举个错误示例:

// 假设后端返回的对象
const percentileData = {
  "5th": 100,
  "15th": 200,
  "62.5th": 300
};

// 错误写法:用点语法访问带小数点的键
console.log(percentileData.62.5th); // 直接抛出「Unexpected number」错误

而正确的处理方式是用方括号语法访问这类特殊键:

// 正确写法:用方括号包裹属性名字符串
console.log(percentileData["62.5th"]); // 输出300

// 如果是遍历映射,用方括号访问也完全没问题
Object.keys(percentileData).forEach(key => {
  console.log(`百分位${key}的值是${percentileData[key]}`);
});
  1. 额外说明:纯数字键为什么没问题?
    比如obj[62]或obj["62"]是合法的,因为解析器会把纯数字键识别为数字类型属性名;但像"62.5th"这种混合了小数点和字母的字符串,完全不符合标识符规则,点语法必然报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:52:14