通过jQuery.fn.data()分配变量将保留对原始标记值的引用
Assigning a variable via jQuery.fn.data() will keep a reference to the original tag value?
考虑以下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'));
相关文章:
- 做<img>或者<画布>保存对原始(大)dataUrl对象的引用
- 骨干模型克隆创建对原始模型的引用
- 如何进行服务器端HTTP重定向更新引用程序(更改原始引用程序)
- 更改范围时如何正确引用原始对象
- 缩小后对原始来源的引用
- 维护 jQuery.clone() 元素对原始元素的引用
- 如何在 JavaScript 中覆盖全局函数,但保留对原始函数的引用
- Javascript - 原始与引用类型
- jQuery 插件,保留对原始元素的引用
- 停止在 javascript 中更新原始对象引用
- 主干集合 - 筛选和呈现集合将丢失对原始未筛选集合的引用
- 如何获取原始值的引用
- Object.assign保留对原始对象的引用
- 为什么引用引用don't更新原始对象
- 使源映射引用远程计算机上的原始文件
- 使用highland.js在引用原始流数据的情况下执行串行异步任务
- Javascript闭包:原始行为与引用行为
- 通过jQuery.fn.data()分配变量将保留对原始标记值的引用
- 删除时获取原始元素的引用
- 奇怪的代码——javascript (JS)中原始变量和引用变量的动态属性