考虑一个名为obj
的对象,我认为它等于{x: 1, y: 'hi'}
(它是在不久前定义的,并且在其整个生命周期中通过各种函数进行了一些修改)。
console.log(obj);
console.log(obj.y);
console.log(obj.x);
Chrome和FF3.6中的结果显示console.log(obj)
为
obj = {x: 1, y: 'hi'}
正如所料。 obj.y
的结果按预期打印hi
,但obj.x
的结果打印0
。
我不明白这种不一致是怎么发生的。它作为整体正确打印,但是在下一行上直接访问参数时打印不同的值。
我认为这与共享对象结构有关,因为我定义了obj
并将其存储在数组arr
中。然后我使用jQuery的obj
函数将.data()
放在DOM元素上。我稍后使用DOM元素中的.data()
检索对象,然后再修改对象(具体参数x
)。当我稍后从arr
访问对象时,我看到的奇怪之处正在发生。
大多数情况下,我只想了解为什么console.log显示不一致
答案 0 :(得分:0)
当您从“.data()”获取对象时,您执行不获取对象的副本 - 您将获得对象本身。只有一个。因此,如果你这样做:
$('#foo').data('obj', { x: 1, y: "hi" });
然后:
var obj = $('#foo').data('obj');
// ...
if (whatever) obj.x = 0;
然后再次通过“.data()”引用“obj”时,“x”属性将为零(如果“if”条件为真,则在这种情况下)。
您可以自行复制数据,如果您想要的是当然的副本,则可以避免这种情况。