【问题标题】:set variable by using localstorage使用 localstorage 设置变量
【发布时间】:2021-05-24 19:40:18
【问题描述】:

我正在尝试创建驾驶员性能助手。

当我启动页面时,它需要从上次读取变量并使用它来计数。 (我创建了一个仪表板,它通过游戏中的插件读取数据。我正在尝试从 DAF(卡车品牌)创建驾驶员性能助手。它应该工作的方式是在推出车辆时,它会相应地计算一个变量它推出的时间(这部分我已经创建并且它可以工作)现在我的问题是。我也试图将它保存在本地存储中,这样它就不会丢失。但是当我尝试读取时变量正在做奇怪的事情本地存储数据。 此代码只需要在 javascript 中。

// variables for driver score
var startBrake = 0;
var endBrake = 0;
var timeDiffBrake = 0;
var countBrake = localStorage.getItem('brake');

var startRollout = 0;
var endRollout = 0;
var timeDiffRollout = 0;
var countRollout = localStorage.getItem('rollout');
    var speed = Math.abs(data.truck.speed > 0 ? Math.floor(data.truck.speed) : Math.round(data.truck.speed));
    var throttle = utils.formatFloat(data.truck.gameThrottle, 2);
    var serviceBrake = utils.formatFloat(data.truck.userBrake, 2);
    var retarder = data.truck.retarderBrake;
    var engineBrake = data.truck.motorBrakeOn;  
    var cruiseControl = data.truck.cruiseControlOn;
    var fuelConsumption = data.truck.fuelAverageConsumption * 100;
    
    // ANTICIPATE
    // Braking to long
    if (speed >= 50) {
        if (serviceBrake < 0.1) {
            startBrake = new Date();
        } else if (serviceBrake > 0.25) {
            endBrake = new Date();
            timeDiffBrake = (endBrake - startBrake) / 1000;
            if (timeDiffBrake > 5) {
                countBrake -= 0.01;
                // add "te lang remmen" display
            }
        }
    }
    localStorage.setItem('brake', countBrake);
    
    // Rolling out
    if (speed > 30 && speed < 89) {
        if (throttle > 0) {
            startRollout = new Date();
        } else if (throttle < 0.05 && serviceBrake == 0) {
            endRollout = new Date();
            timeDiffRollout = (endRollout - startRollout) / 1000;
            if (timeDiffRollout > 1) {
                countRollout += 0.01;
                // maybe add display
            }
        }
    }
    localStorage.setItem('rollout', countRollout);
    
    // EFFICIENT BRAKING
    var brake = localStorage.getItem('brake');
    var rollout = localStorage.getItem('rollout');
    var anticipate = brake + rollout;
    var efficientBraking = 0; // haven't done this yet
    
    var driverScore = Math.round((efficientBraking +  anticipate) / 2);
    data.drivingScorePercent = driverScore <= 0 ? 0 : driverScore >= 100 ? 100 : driverScore;

主要问题是这个变量 var countRollout = localStorage.getItem('rollout'); 它一直说我的数据是 NAN(我认为未定义)

我将这些行更改为“jojo 先生”建议的内容,但不知何故我从本地存储中获得了一些奇怪的数据。我假设“var += 0.01”会增加 0.01,但不知何故它会像这样“0.010.010.010.010.01”而不是 0.01、0.02、0.03。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    当您声明countBrakecountRollout 变量时,值是undefined,因为您尚未将值设置为localStorage。因此,您可以检查localStorage 中是否已经设置了值并设置默认值以防该值尚未设置:

    var countBrake = localStorage.getItem('brake') !== undefined ? localStorage.getItem('brake') : 0;
    
    var countRollout = localStorage.getItem('rollout') !== undefined localStorage.getItem('rollout') : 0;
    

    【讨论】:

      【解决方案2】:

      Shuvo更简单的答案是

      使用Nullish coalescing operator (??)

      var countBrake   = localStorage.getItem('brake')   ?? 0
        , countRollout = localStorage.getItem('rollout') ?? 0
        ;
      

      【讨论】:

        猜你喜欢
        • 2018-10-13
        • 1970-01-01
        • 2011-12-29
        • 1970-01-01
        • 2012-03-01
        • 2012-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多