Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery如何使用.data()存储数据?_Javascript_Jquery - Fatal编程技术网

Javascript jQuery如何使用.data()存储数据?

Javascript jQuery如何使用.data()存储数据?,javascript,jquery,Javascript,Jquery,我有点困惑jQuery如何使用.data()函数存储数据 这是一种叫做expando的东西吗? 或者这是使用HTML5网络存储,尽管我认为这是非常不可能的 文件说: .data()方法允许我们以一种安全的方式将任何类型的数据附加到DOM元素,从而避免循环引用和内存泄漏 当我读到expando时,它似乎有内存泄漏的风险。不幸的是,我的技能不足以阅读和理解jQuery代码本身,但我想知道jQuery如何使用data()存储此类数据 jQuery.fn.extend中的函数数据正在使用此语句保存提

我有点困惑jQuery如何使用
.data()
函数存储数据

这是一种叫做expando的东西吗? 或者这是使用HTML5网络存储,尽管我认为这是非常不可能的

文件说:

.data()方法允许我们以一种安全的方式将任何类型的数据附加到DOM元素,从而避免循环引用和内存泄漏

当我读到expando时,它似乎有内存泄漏的风险。不幸的是,我的技能不足以阅读和理解jQuery代码本身,但我想知道jQuery如何使用
data()
存储此类数据


  • jQuery.fn.extend中的函数
    数据
    正在使用此语句保存提供的变量:

    jQuery.cache[ id ][ name ] = data;
    
    jQuery.cache
    只是一个标准对象,在jQuery名称空间中定义为
    cache:{},

    所以回答您的问题-我相信jQuery将数据存储在名为
    缓存的标准内部JavaScript对象中


    哦,关于你的内存泄漏问题-我真的不知道。如果JavaScript在标准JS对象中存储对DOM元素的引用时遇到一些问题,这可能是一个问题。

    基本上,jQuery会保存使用
    数据(名称、值)/data(名称)
    存储/检索的信息,并在名为
    缓存的内部JavaScript对象中使用
    removeData(名称)
    删除这些信息。剩下的只是一点javascript魔术,让它工作并保持所有关联正确

    哦,来回答你问题的第一部分。它既不是expando也不是HTML5WebStorage

    为了纠正我自己的错误,我认为jQuery确实有一次使用了expando。它在您用来存储信息的
    data()
    元素上设置一个属性。属性名称如下所示

    "jQuery" + now() //e.g. jQuery1268647073375
    
    顺便说一句,
    now()
    是一个内部函数,返回
    (新日期).getTime()

    该值是jQuery生成的
    UUID

    这样jQuery以后就可以从其内部缓存中检索正确的关联数据


    因此,如果您担心IE中的expando,我记得您不能删除它们,那么泄漏应该是最小的,因为jQuery在每个存储数据的元素上只使用1个expando。除非对1000个元素调用
    data()
    ,否则我看不到内存问题

    它被浏览器本地放入缓存,就像cookie一样

          from jquery uncompressed:
    
     if ( data !== undefined ) {
                thisCache[ name ] = data;
            }
    

    还可以查看-它从DOM元素中提取元数据并将其作为对象返回(在注释中讨论)。

    这是什么版本的。在1.4.2中没有这样的行?顺便说一句,即使是jQuery1.4.2也在使用名为cache的内部对象,所以asnwer仍然有效。语法稍有不同,但答案相同。我知道它在1.4.2中的工作原理与此类似。我当时正在查看1.4.2版本,不知道是否跳过了这一行。我知道你的回答仍然很正确