考虑以下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,但如果有人可以对此有所了解,我会很高兴。
答案 0 :(得分:2)
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
时,它正在修改那个相同的数组。
答案 1 :(得分:1)
dataValue.splice(0,1)
更改数组就地,data
仍然具有对该数组的引用。它不会创建数组的副本。
就像你这样做:
var dataValue = ['foo', 'bar'];
jQuery('#test').data('test', dataValue);
dataValue.splice(0,1);
console.log(jQuery('#test').data('test'));