Javascript对象不一致

时间:2011-04-19 18:35:10

标签: javascript jquery

考虑一个名为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显示不一致

1 个答案:

答案 0 :(得分:0)

当您从“.data()”获取对象时,您执行获取对象的副本 - 您将获得对象本身。只有一个。因此,如果你这样做:

$('#foo').data('obj', { x: 1, y: "hi" });

然后:

var obj = $('#foo').data('obj');
// ...
if (whatever) obj.x = 0;

然后再次通过“.data()”引用“obj”时,“x”属性将为零(如果“if”条件为真,则在这种情况下)。

您可以自行复制数据,如果您想要的是当然的副本,则可以避免这种情况。