2011-11-14 19 views
2

對不起,如果標題是以某種方式誤解。 如果我嘗試使用json解析localstorage中的值,並且沒有值,則無法正常工作,所以我遇到了一些Web應用程序的問題。Localstorage&JSON.parse:如果沒有值,JS停止工作?

例如:

如果你這樣做:alert(localStorage.getItem("something"));你空:http://jsfiddle.net/yrGht/

,但如果你做到這一點塊一切:alert(JSON.parse(localStorage["test"]));你什麼也得不到,並從工作停止一切:http://jsfiddle.net/7tCaS/

我該如何解決這個問題,以便我提醒第一個問題,如果它沒有任何價值,那麼繼續工作,因爲基本上我想將此設置爲:JSON.parse(localStorage["test"])作爲全局變量,但它會阻止其他所有內容:http://jsfiddle.net/gq9Ea/

回答

5

試試這個:

alert(JSON.parse(localStorage['test'] || null)); 

失敗是因爲JSON.parse(undefined_variable)給出了一個 「無效字符」 錯誤的原因。如果localStorage['test']不存在,則爲undefined,因此會出現錯誤。如果值爲falsy,則以上代碼將null置於適當位置,其中undefined是。但是,如果值爲0,""或其他虛假值,則這會產生不良影響。如果需要更具體的代碼,請嘗試:

alert(JSON.parse(typeof localStorage['test'] == "undefined" ? null : localStorage['test'])); 
2

當使用本地存儲,你需要在你的編碼,該數據可能不會有預期,你需要測試該條件並以某種方式處理它。最簡單的方式做這將是這樣的:

var rawData = localStorage.getItem("something"); 
var parsedData = {}; // set whatever the default value should be if there is no localStorage value 
if (rawData) { 
    parsedData = JSON.parse(rawData); 
} 

你也可以使用異常處理:

var parsedData; 
try { 
    parsedData = JSON.parse(localStorage.getItem("something")); 
} catch(e) { 
    parsedData = {}; // set default value if localStorage parsing failed 
} 

此外,你應該學會如何看到在瀏覽器錯誤控制檯你的JavaScript錯誤或調試器控制檯。 Javascript並未「封鎖」。它拋出一個未處理的錯誤,因此執行被中止。錯誤控制檯和調試器控制檯都記錄了該錯誤(行號和錯誤類型),供您查看。

+0

謝謝你的回答。我更喜歡kolink的答案,因爲它的編碼較少,並且完全符合我的要求。我已經在使用firebug和chrome的開發工具進行調試,但我仍然無法找到解決方案。無論如何,謝謝 – jQuerybeast