Javascript firefox本地存储未定义

Javascript firefox本地存储未定义,javascript,firefox,local-storage,Javascript,Firefox,Local Storage,在Firefox中,当我尝试(甚至在firebug cosnole中的任何地方)时,我会有奇怪的行为 。。 如果firefox中启用了localStorage,则不会弹出警报/控制台日志,但localStorage会被未知进程破坏,因此setItem会失败 如果我重写 var localStorage = localStorage; 到 代码奇迹般地工作,当“var localstorage”出现在代码中的任何地方时,它就像localstorage一样被删除,即使不满足条件也是如此 我在fir

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

。。 如果firefox中启用了localStorage,则不会弹出警报/控制台日志,但localStorage会被未知进程破坏,因此setItem会失败

如果我重写

var localStorage = localStorage;

代码奇迹般地工作,当“var localstorage”出现在代码中的任何地方时,它就像localstorage一样被删除,即使不满足条件也是如此

我在firefox 29.0.1中遇到了这个问题

我不能用

localStorage=localStorage

因为在控制台模式下,我必须自己定义本地存储,并且需要“var声明”

当代码中的任何地方出现“var localstorage”时,即使不满足条件,也会删除类似于localstorage的内容

localStorage
对象位于全局范围内,是
窗口
对象的一个属性。如果使用
var localStorage
,则无法再从该范围访问全局
localStorage
对象-除非使用
窗口
前缀,如下所示:

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
在这种情况下,当存在/启用本地存储时,可以使用
窗口
前缀

var localStorage = window.localStorage;

localStorage=localStorage不做任何事情,就像
varx;x=x没有太多功能。您对“因为在控制台模式下我必须自己定义localstorage并需要“var声明”是什么意思?mb21-在控制台模式下localstorage不存在,所以我创建了自己的localstorage并将其设置为localstorage变量。但由于MrCode的解释,即使条件为非真,条件中的var reedefinition也会运行。Tnx作为答案,这相当清楚地说明了发生了什么。但是我仍然被卡住了,因为在
var localStorage=localStorage之后也是
窗口。localStorage
未定义,因此我无法设置或使用它。我尝试了
eval(“var localStorage=10”)
,它适用于firefox,但在控制台模式下崩溃,我继续将自定义类设置为localStore变量。我认为您需要一个
else
块,以便执行
else{localStorage=window.localStorage;}
。在if块中,您似乎应该将其设置为自定义对象。我接受了您的回答,因为它清楚地表明了使用“var”定义重新定义localStorage这是一个坏主意,并导致ff中的total崩溃。通过控制台,我指的是通过node
$result=exec(“node-e{$jsContent})
运行的js,我的最终解决方案只是从共享js中去掉整个部分,并仅在运行测试时将其单独添加到$jsContent中。
var localStorage;

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