2013-03-17 482 views
3

我有這個if語句,如果變量值不等於localStorage值,則執行代碼。檢查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的值發生更改,否則不應再次進入。任何想法將不勝感激!

回答

0

由於數據位於'for'循環中,因此每個Tweed ID將覆蓋SINGLE本地存儲項的值,直到循環結束。這意味着localStorage項目的最終值將始終是for循環中的最後一個推文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]); 
    } 
} 

嘿,快死了!

1

嘗試:

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

或者:

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

您正在使用JSON比較的對象,它永遠不會是相同的。

+0

好吧,我會給它一個去,讓你知道我怎麼下去! – Tom 2013-03-17 13:55:18

+0

第二種方法正確地將JSON輸出轉換爲字符串,但是在第一次調用之後它仍然進入if語句的內部。這與if語句中的'localStorage ['tweet_text'] = tweeting'行有什麼關係,可能需要更改? – Tom 2013-03-17 14:16:11

+0

@Tom,你在使用chorme嗎?您可以嘗試通過調試後立即查看'localStorage ['tweet_text']'的值是什麼(也檢查'tweeting',也許它是空的?) – 2013-03-18 06:05:52

相關問題