代码之家  ›  专栏  ›  技术社区  ›  Koosh

当我试图循环访问这些项时,从本地存储获取项会出错。

  •  -1
  • Koosh  · 技术社区  · 7 年前

    我正在做一个小项目,在这个项目中,我尝试从本地存储加载一些东西,并将其附加到我的HTML页面。

    它看起来是这样的:

    function fetchList() {
        var list = JSON.parse(localStorage.getItem('list'));
        var listList = document.getElementById('listList');
    
        for (var i = 0; i < list.length; i++) {
        .....stuff
        }
    

    我把它设置好以便在我的身体标签中调用这个函数

    <body onload="fetchList()">
    

    我目前在本地存储中没有保存任何内容,它在for loop语句上给了我一个错误,特别是.length。我知道这里什么都没有,但它不会跳到循环的末尾吗?

    相反,它给SME带来了这个错误:

    未捕获的类型错误:无法读取空的属性“length”

    这有什么理由不起作用吗?我做错什么了?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Shilly    7 年前

    如果存储中还没有任何内容,json.parse()将返回 null . 那么 var list 也将是 无效的 .

    无效的 没有 length 属性,解释您的错误,因为基于某个对象的长度的for循环需要该长度为数字。

    首先尝试检测JSON字符串的存在:

    var storedJSON = localStorage.getItem('list');
    if ( storedJSON ) {
      var list = JSON.parse( storedJSON  );
      // continue code
    }
    
        2
  •  0
  •   Paulo Roberto Elias    7 年前

    我想你得先检查一下是否是空的

    if (variable == null){
        // your code here.
    }