使用Object.assign()赋值整数时对象引用异常问题求助
解决Object.assign()赋值整数失效的问题
嘿,我来帮你搞定这个Object.assign()的怪事!首先得明确:Object.assign()本身完全支持给对象键赋值整数,它对整数和浮点数的处理逻辑没有区别,所以问题肯定出在代码的某个细节里,咱们一步步拆解排查。
先把你的代码补全成可调试的完整片段方便分析:
let markers = []; let cumulativeTimes = {}; const randomWholeNumber = (min, max) => Math.floor(Math.random() * (max - min + 1) + min); // 假设这是你出问题的操作 Object.assign(cumulativeTimes, { sessionTime: randomWholeNumber(1, 30) }); // 整数赋值"不生效" Object.assign(cumulativeTimes, { avgPerMarker: Math.random() * 10 }); // 浮点数正常
可能的原因&排查步骤
- 键名拼写不一致:这是最常见的坑!比如你赋值用的是
sessionTime,后续查看时写成了sessiontime(大小写错误),或者多打了下划线,直接导致你误以为赋值没生效。建议复制粘贴键名,避免手动输入错误。 - 变量被意外覆盖:检查代码里有没有其他地方重新给
cumulativeTimes赋值,比如cumulativeTimes = {},这会把之前的对象完全替换掉,之前用Object.assign()添加的整数键自然就没了。 - 随机数函数返回异常:单独调用
randomWholeNumber(1,30)看看返回值,会不会出现NaN?比如当你传入的min大于max时,max-min+1会是负数,Math.random()乘负数再floor可能出问题。确保函数参数是合法的min <= max。 - 异步时序问题:如果你的赋值操作是在异步代码里(比如setTimeout、Promise回调),而你在赋值完成前就去访问
cumulativeTimes,自然看不到整数键。这种情况要确保访问时机在赋值之后。 - Object.assign的第一个参数不是对象:如果
cumulativeTimes被意外改成了非对象类型(比如字符串、数字),Object.assign()会把它转成对象,但后续访问时可能又被转回去,导致看不到赋值结果。可以先打印typeof cumulativeTimes确认类型。
验证正常工作的示例
下面是一个确保能正常运行的例子,你可以对比自己的代码找差异:
let cumulativeTimes = {}; const randomWholeNumber = (min, max) => Math.floor(Math.random() * (max - min + 1) + min); // 赋值整数 Object.assign(cumulativeTimes, { totalMinutes: randomWholeNumber(5, 20) }); console.log('整数键值:', cumulativeTimes.totalMinutes); // 正常输出5-20之间的整数 // 赋值浮点数 Object.assign(cumulativeTimes, { avgSpeed: Math.random() * 60 }); console.log('浮点数键值:', cumulativeTimes.avgSpeed); // 正常输出浮点数
总结
Object.assign()对整数和浮点数的处理逻辑完全相同,不存在“只支持浮点数”的情况。按照上面的排查步骤逐一检查,大概率能找到问题所在——多数时候都是键名拼写、变量覆盖或者时序问题导致的“假失效”。
内容的提问来源于stack exchange,提问作者GrayedFox
相关产品推荐
相关产品推荐

