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