firefox localStorage undefined

时间:2014-05-27 13:57:20

标签: javascript firefox local-storage

在Firefox中,当我尝试(甚至在firebug cosnole中的任何地方)时,我会得到奇怪的行为

function supports_local_storage() {
    try {
        return 'localStorage' in window && window['localStorage'] !== null;
    } catch(e){
        return false;
    }
}

var localStorageEnabled = supports_local_storage();
if (!localStorageEnabled) { 
    alert('am in');
    console.log('am in');
    var localStorage = localStorage;
};
localStorage.setItem("textsfff", "20");

.. 如果在firefox中启用了localStorage,那么没有调出警报/控制台日志,但是localstorage会被unknow进程破坏,所以setItem失败。

如果我重写

var localStorage = localStorage;

localStorage = localStorage;

代码奇迹般地起作用,就像" var localstorage"存在于代码中的任何地方,即使条件不满足。

我在firefox 29.0.1中遇到此问题

我无法使用

localStorage = localStorage;

因为在控制台模式下我必须自己定义localstorage并需要" var declaration"。

1 个答案:

答案 0 :(得分:2)

  当" var localstorage"删除它就像localstorage一样。存在于代码中的任何地方,即使条件不满足。

localStorage对象位于全局范围内,并且是window对象的属性。如果您使用var localStorage,那么您将无法再从该范围访问全局localStorage对象 - 除非您使用window前缀,如下所示:

window.localStorage.getItem(..);

确实如此,即使您的条件未得到满足,因为所有var声明都被提升到当前范围的顶部,而不管任何条件语句。代码相当于:

var localStorage;

if(!localStorageEnabled){
    localStorage = localStorage; // this is undefined
}

因此,当您执行var localStorage = localStorage时,声明但未定义局部变量localStorage,在当前作用域的顶部,然后您将undefined分配给本地localStorage }}。这就是localStorage = localStorage在没有var的情况下工作的原因,因为没有var它就会找到全局对象。

  

我无法使用localStorage = localStorage;因为在控制台模式下我必须自己定义localstorage并需要" var declaration"。

在这种情况下,您可以在存在/启用localStorage时使用window前缀。

var localStorage = window.localStorage;