计算对象属性时返回-Infinity值,如何修复?
问题分析与解决方案
你的代码返回-Infinity,本质是数值计算超出了JavaScript可表示的最小负数范围,或参与计算的变量本身存在异常值。按以下步骤排查修复:
先排查变量的原始值
在计算前打印所有关键变量,确认没有异常:console.log('dayanıklılık1:', singleton.kartlistesib1[sayi4].dayanıklılık); console.log('dayanıklılık2:', singleton.kartlistesib2[sayi4].dayanıklılık); console.log('etki1:', etki1); console.log('etki2:', etki2);如果其中某个值是
Infinity/-Infinity,问题根源在etki()方法或dayanıklılık属性的赋值逻辑里。处理计算溢出
代码中etki1/(8/10)*etki2等价于etki1 * etki2 / 0.8,若etki1和etki2都是极大正数,乘积会直接溢出成Infinity,减去它就会得到-Infinity。可以:- 限制
etki()的返回值范围,避免生成过大的数; - 对计算结果做边界兜底:
const etkiCalc = etki1 * etki2 / 0.8; sayi6 = Math.max(singleton.kartlistesib1[sayi4].dayanıklılık - etkiCalc, Number.MIN_SAFE_INTEGER); sayi7 = Math.max(singleton.kartlistesib2[sayi4].dayanıklılık - etkiCalc, Number.MIN_SAFE_INTEGER);
- 限制
检查
etki()方法内部逻辑
确认etki()里没有除以0的操作——如果方法内存在x / 0这类代码,会直接返回Infinity,代入后续计算必然引发异常。验证索引有效性
检查sayi4是否在kartlistesib1、kartlistesib2的合法索引范围内,索引越界会导致获取到undefined,访问其属性或方法可能产生异常值,间接引发计算问题。
内容的提问来源于stack exchange,提问作者fatih turan
相关产品推荐
相关产品推荐

