gpt4 book ai didi

JavaScript 对象不一致

转载 作者:行者123 更新时间:2023-11-28 10:20:43 26 4
gpt4 key购买 nike

考虑一个名为 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 中。然后我输入obj使用 jQuery 的 DOM 元素 .data()功能。我稍后使用 .data() 检索该对象从 DOM 元素并进一步修改对象(特别是参数 x )。当我稍后从 arr 访问该对象时,我看到的奇怪现象发生了。 。

大多数情况下,我只是想了解为什么 console.log 显示不一致

最佳答案

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

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

然后:

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

然后,当您再次通过“.data()”引用“obj”时,“x”属性将为零(在本例中,如果“if”条件为真)。

您可以通过自己制作数据副本来避免这种情况,如果您想要当然是副本。

关于JavaScript 对象不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5721014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com