【发布时间】:2025-09-19 04:35:01
【问题描述】:
我正在尝试执行一些 JS 数学来添加总值,基于从 JSON 对象获取其值的一系列变量。但是,当我在浏览器中运行脚本时,控制台日志显示了几乎一半已完成的总和,另一半只是作为字符串链接在一起。
如果我将以下内容粘贴到控制台中:
var sparksOfferCount = 10;
var sparksAddedOffers = 3;
var sparksUNaddedOffers = (sparksOfferCount - sparksAddedOffers); // offers that haven't been added yet
var sparksAllRewards = 0;
var sparkstotalStreakOffers = 0;
var derivedSparksTotalOffers = (sparksUNaddedOffers + sparksAllRewards + sparkstotalStreakOffers);
console.log('derived total of new offers', derivedSparksTotalOffers);
它将返回 7。但是,上面我已经用实际整数替换了对 JSON 对象的引用。当我像这样运行我的代码时,它从 JSON 调用中动态获取它的值,它在控制台中返回“70”。奇怪,因为这意味着它可以从 10 中减去 3,然后为 sparksAllRewards 添加一个 0,但它不会为 sparkstotalStreakOffers 显示另一个 0。
var sparksSSO = JSON.parse(sessionStorage.getItem('sparksSSO')) || {};
// global variables for use with session storage
var sparksOfferCount = (sparksSSO.totalOffers >= 0) ? sparksSSO.totalOffers : "" ;
var sparksAllOffers = (sparksSSO.allOffers);
var sparksAddedOffers = (sparksSSO.totalAddedOffers);
var sparksUNaddedOffers = (sparksOfferCount - sparksAddedOffers); // offers that haven't been added yet
var sparksAllRewards = (sparksSSO.allRewards);
var sparkstotalStreakOffers = (sparksSSO.totalStreakOffers);
var derivedSparksTotalOffers = (sparksUNaddedOffers + sparksAllRewards + sparkstotalStreakOffers);
console.log('derived total of new offers from session storage', derivedSparksTotalOffers);
我很困惑。有什么想法吗?
编辑: 根据 Arthur Borba 的指导,这是工作脚本
var sparksOfferCount = (sparksSSO.totalOffers >= 0) ? sparksSSO.totalOffers : 0 ;
var sparksAllOffers = Number(sparksSSO.allOffers);
var sparksAddedOffers = Number(sparksSSO.totalAddedOffers);
var sparksUNaddedOffers = Number(sparksOfferCount - sparksAddedOffers); // offers that haven't been added yet
var sparksAllRewards = Number(sparksSSO.allRewards);
var sparkstotalStreakOffers = Number(sparksSSO.totalStreakOffers);
var derivedSparksTotalOffers = Number(sparksUNaddedOffers + sparksAllRewards + sparkstotalStreakOffers);
console.log('derived total of new offers from session storage', derivedSparksTotalOffers);
【问题讨论】:
-
也许您在 JSON 对象中的值之一是字符串?这可能导致“7”的答案与“0”连接而不是添加 0。另外我认为这是不相关的(因为我认为它不会导致“70”作为输出),但是
sparksOfferCount不应默认为空字符串(因为您将其用作数字)
标签: javascript json math integer global-variables