从localStorage意外编号中检索数据

时间:2014-07-08 15:31:48

标签: javascript local-storage

我的问题是当我运行此代码时出现意外的数字错误。这个网站对我帮助很大,但似乎无法理解这种情况发生的原因。

<html>
<head>
<title>help</title>
<script>
    var object1 ={
    number:0,
    name:" ",
    list:[ ]}
    var storedAt = 2;
    var item="";

function doStuff() {
    object1.list.push("hello");
    object1.list.push("world");
    object1.number = 5;
    object1.name = "des"
    item = JSON.stringify(object1)
    store();
      }

       function store() { 
           localStorage.setItem("item"+storedAt,item+storedAt); for (var i=0;i<localStorage.length; i++){ var key = localStorage.key(i); if (key.substring(0,1) =="") {  var value = localStorage.getItem(key);  }}  return;}


       function getBack() {
          var di =JSON.parse( localStorage.getItem("item"+storedAt))
          alert("display  = "+di.number);
            }
         </script>
         </head>
         <body>
         <input type="button"id="doStuff"value = "Do Stuff" onclick = doStuff();>
         <input type="button"id="getBack"value = "get Back" onclick = getBack();>
         </body>
         </html> 

当我运行此问题时,问题显示在警报中。

2 个答案:

答案 0 :(得分:1)

将此localStorage.setItem("item"+storedAt,item+storedAt);更改为此localStorage.setItem("item"+storedAt,item);,现在它应该更有意义。

如果没有,那么你正在做的是用storedAt值改变json字符串的状态,然后当你试图解析它时,JSON.parse会抛出错误,因为json不再有效。

答案 1 :(得分:0)

这有效:

<html>
<head>
    <title>help</title>
    <script>
        var object1 ={
            number:0,
            name:" ",
            list:[ ]}
            var storedAt = 2;
            var item="";

            function doStuff() {
                object1.list.push("hello");
                object1.list.push("world");
                object1.number = 5;
                object1.name = "des"
                item = JSON.stringify(object1)
                store();
            }

            function store() { 
                localStorage.setItem("item"+storedAt, item);
                for (var i=0;i<localStorage.length; i++){
                    var key = localStorage.key(i); if (key.substring(0,1) =="") {  var value = localStorage.getItem(key);  }}  return;
                }


                function getBack() {
                    var di =JSON.parse( localStorage.getItem("item"+storedAt))
                    alert("display  = "+di.number);
                }
            </script>
        </head>
    <body>
        <input type="button"id="doStuff"value = "Do Stuff" onclick = doStuff();>
        <input type="button"id="getBack"value = "get Back" onclick = getBack();>
    </body>
</html>

当你使用setItem时,你将storedAt附加到Object,而JSON.parse失败,因为它不是有效的对象。