在JavaScript中,当我说window.SomeData = 'whatever'
时,它会在浏览器中保存在哪里?我以为它会保存在viewstate
中,但它没有。另外,在window.someKey
中保存一些数据需要多少安全性。我不是在谈论用户名或密码存储,而是一些常规数据,如某些记录的PK值。
- 编辑 -
我问这个的原因是因为我有一个带有5个标签的页面,每个标签都是通过AJAX调用加载的。我需要保存从AJAX请求返回的数据,目前我使用window.somekey来保存它。
答案 0 :(得分:2)
它将保存在全局对象window
中。该对象不是非常安全,其生命周期适用于该页面。
答案 1 :(得分:2)
它不会在任何地方保存,它与使用全局变量完全相同:
var SomeData = "whatever"; //done in global scope obviously
window.SomeData === "whatever" //true
答案 2 :(得分:0)
无处,有效。存储在window
对象的随机字段中的数据不会保存。
答案 3 :(得分:0)
令人烦恼的答案是它保存在内存中!它没有什么不同
var j = {}
j.SomeData = 'Whatever'
window
只是一个包含窗口所有信息的全局变量(例如文档DOM)
window
可以保存数据,如上面的j
变量。它不比在js中保存任何其他信息更安全。您唯一的风险是items名称空间可能被另一个库使用。
所以,如果我是你,我会这样做。 (使用它作为编写好的JS http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-1/)
的指南(function(MyLibrary, $, undefined) {
var stuff;
MyLibrary.SomeData = 5;
}(window.MyLibrary = window.MyLibrary || {}, jQuery)); // or moo tools
alert(window.MyLibrary.SomeData); // 5!
答案 4 :(得分:0)
通常使用对象作为特定于Web应用程序的函数和变量的命名空间是一种好习惯。例如:
var site = {};
site.someData = 'whatever';
site.initGallery = function() {
//
};
全局命名空间中的变量声明(在客户端JS中,window
是全局命名空间)被称为全局命名空间污染,并且通常是不受欢迎的并且不推荐,因为它可能导致与其他库的命名冲突污染全局命名空间,或者更糟糕的是,使用浏览器的本地全局对象。