2012-09-27 33 views
1

如果可能的話,我希望能夠用速記符號從localStorage得到一個項目,然後就可以使用JSON.parse()localStorage的與點/支架標記來與JSON.parse工作獲取項()

在下面我的代碼,如果我用下面的工作原理:

var retrievedObject = JSON.parse(localStorage.getItem('testObject')); //works 

但是,如果我用以下兩種速記選項之一,這是行不通的:

var retrievedObject = JSON.parse(localStorage.testObject); //doesn't work 

var retrievedObject = JSON.parse(localStorage['testObject']); //doesn't work 

我的所有代碼都在下面和jsFiddle上:http://jsfiddle.net/TestB/1/

//var retrievedObject = JSON.parse(localStorage.getItem('testObject')); //works 
var retrievedObject = JSON.parse(localStorage.testObject); //doesn't work 
//var retrievedObject = JSON.parse(localStorage['testObject']); //doesn't work 

if (retrievedObject == null) { 

    var testObject = { 'one': 1, 'two': 2, 'three': 3 }; 

    // Put the object into storage 
    localStorage.testObject = JSON.stringify(testObject); 

} 

else { 

retrievedObject.four = 4; 

// Put the object into storage 
localStorage.testObject = JSON.stringify(retrievedObject); 

} 
// Retrieve the object from storage 
var retrievedObject = JSON.parse(localStorage.getItem('testObject')); 

console.log('retrievedObject: ', retrievedObject);​ 
+1

工作正常,我在這裏:首先運行:'retrievedObject: 對象 之一:1 三:3 二:2'第二次運行:'四:4 之一:1 三:3 二:2' –

+1

對我來說......我也一定要編輯底部的檢索行到'['testObject']'和'.testObject' –

+0

jsFiddle沒有註釋掉工作代碼。我用更新的jsFiddle鏈接更新了這個問題:http://jsfiddle.net/TestB/1/。 –

回答

2

發生第一次,當還沒有定義的localStorage.testObject問題..

在這種情況下localStorage.testObject是未定義和JSON.parse失敗,這樣的說法

在另一方面的getItem方法在內部處理並返回null ..

您可以使用JSON.parse(localStorage.testObject || null)

+0

謝謝!這工作!只是所以我明白...是最後一個選項,說明如果'localStorage.testObject'不存在然後運行'JSON.parse(null)',它返回'null'? –

+0

@Mark yes ..'||'是邏輯「OR」,我們將它用作[short-circuit](https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Expressions_and_Operators #短Circuit_Evaluation)。所以如果'localStorage.testObject'是'undefined',那麼它將使用'null'。 –

+1

@Mark'localStorage.testObject || null'返回此表達式或null的第一個真值,因此如果'localStorage.testObject'產生'undefined',你就會得到'null',當你像訪問localStorage時那樣返回null:'getItem()' ! – Christoph