检查localStorage中是否存在变量值

时间:2013-03-17 13:40:37

标签: javascript json html5 local-storage

我有这个if语句,如果变量值不等于localStorage值,则执行代码。

for(i=0;i<tweets.length;i++){

   tweetID = tweets[i][0].id_str;

   if(tweetID != localStorage['tweet_id']){
       alert("new tweet"); 
       localStorage['tweet_id'] = tweetID;
       console.log(localStorage['tweet_id']);
   }
}

我的问题是它总是进入if语句,表明该值永远不会等于localStorage值。第一次运行此代码时,它将始终进入if语句,因为'tweet_id'localStorage项未定义。一旦进入,它应该将'tweetID'值写入localStorage值,正如您在我的代码中看到的那样。页面每30秒刷新一次,如果没有新的推文,这些值应该匹配,而不是进入if语句。

事实并非如此。我究竟做错了什么?

从使用console.log这些值在第一次进入if语句后匹配,所以除非tweetID的值发生变化,否则它不应再次进入。任何想法将不胜感激!

2 个答案:

答案 0 :(得分:1)

尝试:

if(tweeting !=JSON.parse(localStorage['tweet_text']))

或者:

if(JSON.stringify(tweeting) != localStorage['tweet_text'])

您正在将对象与JSON进行比较,它将永远不会相同。

答案 1 :(得分:0)

当数据处于'for'循环时,每个花呢ID都会覆盖SINGLE本地存储项的值,直到循环结束。这意味着localStorage项的最终值将始终是for循环中的最后一个tweet ID。因此,这两个值永远不会匹配,导致它始终进入'if'语句。

感谢@ hodaya的回答,在将jSON对象的值与localStorage项进行比较之前,还必须将其转换为字符串。这是因为localStorage仅将值存储为字符串。从@ hodaya的回答中给出的例子; 'JSON.stringify'用于将数组转换为JSON字符串,'JSON.parse'用于将JSON字符串转换回数组。消息来源:Microsoft。所以这些答案都没有解决问题。

答案:

必须将JSON对象的值转换为字符串。必须包含一个计数器,以便为'for'循环中的每个迭代创建一个唯一的新localStorage项。

r=0;

for(i=0;i<tweets.length;i++){

    //must have a counter added to each localStorage item to make it unique.                                   
    r+=1;

    //transforming the JSON id_str into a JavaScript object.
    tweetID = jQuery.parseJSON(tweets[i][0].id_str);

    //tweetID is now an integer value

    //converting it to a string ready for localStorage.
    tweetIdString = tweetID.toString();

    if(tweetIdString != localStorage['tweet_id' + r]){ 

      alert("new tweet");
      localStorage['tweet_id' + r] = tweetIdString;  
      console.log(localStorage['tweet_id' + r]);
   }
}
嘿,presto!