window.somedata存储在哪里

where does window.somedata gets stored

本文关键字:在哪里 存储 somedata window      更新时间:2023-09-26

在JavaScript中,当我说window.SomeData = 'whatever'时,它在浏览器中保存在哪里?我以为它会保存在viewstate中,但事实并非如此。另外,在window.someKey中保存一些数据有多安全。我说的不是用户名或密码存储,而是一些通用数据,比如一些记录的PK值。

--编辑--

我之所以这么问,是因为我有一个包含5个选项卡的页面,每个选项卡都通过AJAX调用加载。我需要保存AJAX请求返回的数据,目前我正在使用window.somekey来保存它。

它被保存在全局对象window中。那个对象不是很安全,它的生存期是针对那个页面的。

它不会保存在任何地方,它与使用全局变量完全相同:

var SomeData = "whatever"; //done in global scope obviously

window.SomeData === "whatever" //true

无处有效。不保存存储在window对象的随机字段中的数据。

恼人的答案是它保存在内存中!这和没什么不同

var j = {}
j.SomeData = 'Whatever'

window只是一个全局变量,包含了关于窗口(如文档DOM)的所有信息

window可以像上面的j变量一样保存数据。它的安全性不亚于将任何信息保存在js中的任何其他地方。唯一的风险是项命名空间可能被另一个库使用。

所以如果我是你,我会这么做。(以此作为编写优秀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!

通常将对象用作特定于web应用程序的函数和变量的命名空间是一种很好的做法。例如:

var site = {};
site.someData = 'whatever';
site.initGallery = function() {
    //
};

全局名称空间中的变量声明(在客户端JS中,window是全局名称空间)被称为全局名称空间污染,通常是不可取的,因为它可能导致与其他库的命名冲突,这些库也会污染全局名称空间,或者更糟的是,与浏览器的本地全局对象的命名冲突。