通过jQuery.fn.data()分配变量将保留对原始标记值的引用

Assigning a variable via jQuery.fn.data() will keep a reference to the original tag value?

本文关键字:原始 引用 保留 data fn jQuery 变量 分配 通过      更新时间:2023-09-26

考虑以下html:

<div id="test" data-test='["foo", "bar"]'></div>

和以下javascript:

var dataValue = jQuery('#test').data('test');
dataValue.splice(0,1);

我将得到以下结果:

dataValue
['bar']         // as expected, i'm fine with that

jQuery('#test').data('test')
['bar']         // why ? i would expect ['foo', 'bar']

这可能是一些非常基本的东西,我不懂javascript本身或jQuery,但我很高兴,如果有人能说明这一点。

JavaScript使用引用。这意味着:

[1] !== [1]; // two separate objects

但:

var arr = [1];
$(elem).data('test', arr)
$(elem).data('test') === arr; // same object again, jQuery respects references

我更喜欢把它看作巧克力棒(:-))。两块巧克力是不一样的。如果你吃了一个,另一个还有100%剩余。但是,如果你只有一块巧克力棒,你吃了它,把它放在一边,过一段时间再把它拿回来,你会得到同样的(吃过的)巧克力棒。

所以我想说的是,当调用.splice时,它修改的是同一个数组

dataValue.splice(0,1)就地改变了数组data仍然有对该数组的引用。它不创建数组的副本。

这和如果你这样做是一样的:

var dataValue = ['foo', 'bar'];
jQuery('#test').data('test', dataValue);
dataValue.splice(0,1);    
console.log(jQuery('#test').data('test'));