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

Setting an array's length to 0 seems not to empty the array

本文关键字:数组 清空 设置      更新时间:2023-09-26

我正在使用全局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  = {};