Javascript 为什么获取本地存储项会产生“;未定义”;?

Javascript 为什么获取本地存储项会产生“;未定义”;?,javascript,cordova,local-storage,accelerometer,Javascript,Cordova,Local Storage,Accelerometer,我们正在使用PhoneGap开发一款使用iPhone加速计的计步器应用程序 下面是我们当前运行的代码的副本: <!DOCTYPE html> <html> <head> <title>Accelerometer</title> <script type="text/javascript" charset="utf-8" src="js/cordova-1.7.0rc1.js"></script>

我们正在使用PhoneGap开发一款使用iPhone加速计的计步器应用程序

下面是我们当前运行的代码的副本:

<!DOCTYPE html>
<html>

<head>
  <title>Accelerometer</title>

  <script type="text/javascript" charset="utf-8" src="js/cordova-1.7.0rc1.js"></script>

  <script type="text/javascript" charset="utf-8">
    // The watch id references the current `watchAcceleration`
    var watchID = null;
    var stepCount = 0;
    window.localStorage.setItem('exp');
    var expGain = 0;
    var totalExp = window.localStorage.getItem('exp');
    var userAge = window.localStorage.getItem('age');
    var handicap = 0;

    if (userAge <= 10) {
      handicap = 10;
    } else if (userAge > 10) {
      handicap = 5;
    }

    // Wait for PhoneGap to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);

    // PhoneGap is ready
    //e7
    function onDeviceReady() {
      startWatch();
    }

    // Start watching the acceleration
    //
    function startWatch() {

      // Update acceleration every 5 seconds
      var options = {
        frequency: 1000
      };

      watchID = navigator.accelerometer.watchAcceleration(onSuccess, onError, options);
    }

    // Stop watching the acceleration
    //
    function stopWatch() {
      if (watchID) {
        navigator.accelerometer.clearWatch(watchID);
        watchID = null;
      }
    }

    //count steps and calculate experience gained
    function countSteps(accelx, timestamp, expGain, totalExp) {
      var element = document.getElementById('accelerometer');
      //var accCount = Math.round(acceleration.x);
      //stepCount = stepCount + Math.abs(accCount);
      stepCount = stepCount + 1;
      expGain = stepCount * handicap;
      totalExp = totalExp + expGain;
      //window.localStorage.setItem('exp', totalExp);       
      element.innerHTML = '<br>Step Count: ' + stepCount + '<br/>' +
        'Acceleration X: ' + Math.abs(accelx) + '<br />' +
        'Timestamp: ' + timestamp + '<br />' +
        'Experience: ' + totalExp + '<br />';
    }

    // onSuccess: Get a snapshot of the current acceleration
    //
    function onSuccess(acceleration) {
      var element = document.getElementById('accelerometer');
      var accelx = Math.round(acceleration.x)
      var timestamp = acceleration.timestamp
      //element.innerHTML = 'Acceleration X: ' + Math.abs(accelx) + '<br />' +
      //'Acceleration Y: ' + acceleration.y + '<br />' +
      //'Acceleration Z: ' + acceleration.z + '<br />' + 
      //'Timestamp: '      + acceleration.timestamp + '<br />';
      if (Math.abs(accelx) > 1) {
        countSteps(accelx, timestamp, expGain, totalExp);
      }
    }

    // onError: Failed to get the acceleration
    //
    function onError() {
      alert('onError!');
    }
  </script>
  <link media="only screen and (max-device-width: 480px)" href="css/iPhone.css" rel="stylesheet" type="text/css">
</head>

<body>
  <div id="accelerometer">Waiting for accelerometer...</div>
  <button onclick="startWatch();">Start Watching</button>
  <button onclick="stopWatch();">Stop Watching</button>
  <br />
  <p><a href="index.html">back</a>
  </p>
</body>

</html>

加速计
//watch id引用当前的“watch加速”`
var-watchID=null;
var stepCount=0;
window.localStorage.setItem('exp');
var-expGain=0;
var totalExp=window.localStorage.getItem('exp');
var userAge=window.localStorage.getItem('age');
var障碍=0;
如果(用户年龄10){
障碍=5;
}
//等待PhoneGap加载
//
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
//PhoneGap已经准备好了
//e7
函数ondevicerady(){
startWatch();
}
//开始观察加速度
//
函数startWatch(){
//每5秒更新一次加速度
变量选项={
频率:1000
};
watchID=navigator.Accelerator.watchAcceleration(onSuccess、onError、options);
}
//不要再看加速度了
//
功能秒表(){
if(watchID){
navigator.Accelerator.clearWatch(watchID);
watchID=null;
}
}
//计算步骤并计算获得的经验
函数countSteps(加速度、时间戳、expGain、totalExp){
var元素=document.getElementById('Accelerator');
//var Account=数学圆(加速度x);
//stepCount=stepCount+Math.abs(accCount);
步骤计数=步骤计数+1;
expGain=步数*障碍;
totalExp=totalExp+expGain;
//window.localStorage.setItem('exp',totalExp);
element.innerHTML='
步骤计数:'+stepCount+'
'+ '加速度X:'+Math.abs(加速度X)+'
'+ '时间戳:'+时间戳+'
'+ '经验:'+totalExp+'
'; } //onSuccess:获取当前加速度的快照 // 成功时的功能(加速){ var元素=document.getElementById('Accelerator'); var accelx=数学圆(加速度x) var timestamp=加速度.timestamp //element.innerHTML='Acceleration X:'+Math.abs(AccelerX)+'
'+ //“加速度Y:”+加速度.Y+”
”+ //'加速度Z:'+加速度.Z+'
'+ //'时间戳:'+acceleration.Timestamp+'
'; 如果(数学abs(加速度)>1){ countSteps(加速度、时间戳、expGain、totalExp); } } //OneError:无法获取加速度 // 函数onError(){ 警报('onError!'); } 等待加速计。。。 开始看 别看了


问题是:我们在
window.localStorage.setItem('exp')的结果旁边不断得到一个
“undefined”
。我们一整天都在努力解决这个问题。

localStorage.setItem不需要第二个参数吗?您是否尝试过:

window.localStorage.setItem("exp","");

localStorage.setItem不需要第二个参数吗?您是否尝试过:

window.localStorage.setItem("exp","");

setItem
接受两个参数(一个键和一个值)。如果未指定参数,则默认值为
undefined

window.localStorage.setItem('exp')表示
window.localStorage.setItem('exp',未定义)


如果希望它具有其他值,则需要指定它。

setItem
接受两个参数(一个键和一个值)。如果未指定参数,则默认值为
undefined

window.localStorage.setItem('exp')表示
window.localStorage.setItem('exp',未定义)


如果你想让它有一些其他的值,那么你需要指定它。

为什么你在发现第3行错误之前写了那么多代码?因为我们每周只能在Unigeze测试一次iPhone,我记得那些日子。。。编译100行Fortran需要一个小时,结果在打印机上打印出来。。。CS学生的资源不是优先考虑的。为什么你在发现第3行错误之前写了那么多代码?因为我们每周只能在uniGeeze测试一次iPhone,我记得那些日子。。。编译100行Fortran需要一个小时,结果在打印机上打印出来。。。CS学生的资源不是优先考虑的。谢谢,这就是问题所在。但是现在我们得到了我们想要的结果,但是它在每个结果前面显示一个0!我们一直在围绕这个问题转啊转。谢谢,这就是问题所在。但是现在我们得到了我们想要的结果,但是它在每个结果前面显示一个0!我们一直在围绕这个问题。