gpt4 book ai didi

javascript - jQuery - $.extend deep 丢失对数组的引用

转载 作者:行者123 更新时间:2023-11-29 21:47:19 26 4
gpt4 key购买 nike

我在 jQuery 的 $.extend 方法和引用数组(在 JavaScript 中被视为对象)中观察到一个奇怪的问题。

我使用了一个默认对象,定义如下:

var defaults = {
numbers: []
};

我有一个配置选项,然后传递一个函数,定义如下:

var config = {
numbers: [1, 2, 3]
};

在一个函数中,我扩展了这两个(使用深度 $.extend):

function configure(settings) {
var nums = $.extend(true, {}, defaults, settings);

nums.numbers.push(4);

console.log(settings, nums);
}

configure(config);

我在log这两个的时候,结果如下:

settings: {"numbers":[1,2,3]}
nums: {"numbers":[1,2,3,4]}

我没能理解的是,jQuery 从左到右合并对象。

我希望因为 settings 是最后一个扩展的对象,所以在 nums 中创建的数字数组是对 settings.numbers 的引用(因为 settings 是最后一个被 $.extend 编辑的对象)。事实并非如此(正如您在我记录最终结果时看到的那样)。

谁能解释一下为什么?这是导致我的应用程序中很难找到错误的原因,因此我想确保我理解它,以免再次发生。

最佳答案

您进行了深度合并:

On a deep extend, Object and Array are extended

目标对象是 deep bool 值之后的第一个对象。

在您的情况下,它是 {} 也是 nums 因为您的分配。

settings 不是目标对象。因此,它的 numbers 数组不是 nums 中的一个。

关于javascript - jQuery - $.extend deep 丢失对数组的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30644665/

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