2014-08-29 135 views
0

我想在一個小站點(小於10頁)中使用localStorage作爲全局變量。我想在js文件中聲明變量,但不要在每次加載頁面時重置它們。如何避免重置js文件中的全局變量

有沒有一種方法可以防止重新加載幾行,而不僅僅是阻止/重置另一個全局?

/** placed in a sj file **/ 
if(localStorage['lock'] != '1') { 
    localStorage['val1'] = '0'; 
    localStorage['val2'] = '0'; 
    localStorage['val3'] = '0'; 

    localStorage['lock'] = '1'; 
} 
+0

'localStorage'是不停留在一個頁面重載,或在會話結束,即使一個永久性的Cookie。 – Zak 2014-08-29 16:18:23

+0

在'localStorage'中有一個條目,告訴你它是否被初始化似乎是一個合理的解決方案。但是,您可以使用現有的條目,例如'if(localStorage.getItem('val1')!= null)' – 2014-08-29 16:19:22

+0

您可能不需要其他屬性(並且可以使用'localStorage.length'左右),但通常情況下這是如何工作的。不過,對每個物業進行存在檢查可能會更方便。 – Bergi 2014-08-29 16:22:24

回答

0

原生Local Storage沒有任何鎖定可變性。

您發現的解決方案對我來說很整潔。它的優點是快速(因爲它只檢查一個鍵)。

但是,您可能希望在已完成的頂部添加一個小級別的抽象。但這基本上是品味的問題(這裏的性能影響很小)。

function freezeInLocalStorage(key, value) { 
    if (typeof localStorage[key] !== 'string') { 
    localStorage[key] = value; 
    } 
} 

freezeInLocalStorage('val1', '0'); 
freezeInLocalStorage('val2', '0'); 
freezeInLocalStorage('val3', '0'); 

DEMO

+1

如果空字符串是條目的可能值(空字符串是虛假的),這將不起作用。 – 2014-08-29 16:22:10

+0

這種方法仍然可以工作,你只需要考慮所有可能的有效條目。 – KnightHawk 2014-08-29 16:24:06

+0

@FelixKling:好點。固定。 – aymericbeaumet 2014-08-29 16:24:57