如何避免重置js文件中的全局变量

问题描述:

我想在一个小站点(小于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

原生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