【问题标题】:Using JSON powered variables to perform JS math使用 JSON 驱动的变量来执行 JS 数学
【发布时间】: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


【解决方案1】:

尝试初始化你的计数器

var sparksOfferCount = (sparksSSO.totalOffers >= 0) ? sparksSSO.totalOffers : "" ;

带零(不是空字符串),像这样:

var sparksOfferCount = (sparksSSO.totalOffers >= 0) ? sparksSSO.totalOffers : 0 ;

还要检查Number,以确保您使用的是数字而不是字符串:

var sparksAllOffers = Number(sparksSSO.allOffers); // do it for every variable

如果这不是您想要的,请提供一些 JSON 数据示例。

【讨论】:

    最近更新 更多