gpt4 book ai didi

javascript - 将数组的长度设置为 0 似乎不会清空数组

转载 作者:行者123 更新时间:2023-11-28 15:54:41 25 4
gpt4 key购买 nike

我使用全局 JavaScript 变量在 Ajax 请求后存储一些数据。它用于在 jqueryui 日期选择器上标记日期,并以 array[date] = type_of_date

的形式存储

这是我用来计算数组的函数

function get_date_exceptii(data, cod_calendar) {

if(typeof(window.date_zile_ore_modificate) !== 'undefined' && typeof(window.date_zile_nelucratoare) !== 'undefined') {
window.date_zile_ore_modificate.length = 0;
window.date_zile_nelucratoare.length = 0;
}
else {
window.date_zile_ore_modificate = [];
window.date_zile_nelucratoare = [];
}

parametri = 'cod_calendar='+cod_calendar+'&data='+data;

$j.ajax({
url: "proiecte/ajax/colectare_date_exceptii.php?sid="+Math.random(),
type: 'POST',
async: false,
data: parametri
})
.done( function (msg) {
arr_msg = msg.split('[sep1]');
$j.each(arr_msg, function (index, val) {
arr_exceptie = val.split('[sep]');
if(arr_exceptie[1] == 'nelucratoare')
window.date_zile_nelucratoare[arr_exceptie[0]] = arr_exceptie[2];
else {
window.date_zile_ore_modificate[arr_exceptie[0]] = arr_exceptie[2];
}
});
});
console.log(window.date_zile_ore_modificate);
console.log(window.date_zile_nelucratoare);
}

这两个日志当然是为了调试用的。问题是即使执行那段代码,数组也永远不会被清除。是我的语法错误还是我误解了全局变量和/或数组?

最佳答案

arr_exceptie[0]指定的索引可能是非数字的。

设置 length = 0 仅清除数字命名的属性(根据 ES5 15.4.5.2 ),因此具有非数字名称的属性不会被清除。例如,如果您设置 date_zile_ore_modificate['foo']date_zile_ore_modificate[5],则设置 date_zile_ore_modificate.length=0 会清除 5 属性,但不会清除 foo 属性。

但是,将变量设置为全新的数组显然会清除所有属性,因为它完全消除了旧的数组对象。因此,只需使用

window.date_zile_ore_modificate = [];
window.date_zile_nelucratoare = [];

在所有情况下并消除初始条件。

此外,如果您的属性名称完全是非数字的,您可能应该使用普通对象而不是数组(因为数组实际上只适合数字索引数据):

window.date_zile_ore_modificate = {};
window.date_zile_nelucratoare = {};

关于javascript - 将数组的长度设置为 0 似乎不会清空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19320576/

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