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

标签 javascript jquery

我使用全局 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/

相关文章:

javascript - 使用函数式编程将数据从多个对象数组映射到 Javascript 中的新对象

javascript - Vanilla JavaScript 在主体上设置样式

jquery - 使用数据表插件删除行,然后从数据库中删除它

javascript - 如何在 javascript 中检查 li 元素是否具有内部 ul?

jquery - 选中复选框时从复选框控制父级 5 级

javascript - 使用 JavaScript getElementById 定位 CSS

javascript - 打开 div 后,toggleClass 不会关闭

javascript - 尝试使用js代码清理错误的CSS规则

javascript - JQuery UI 自动完成不会过滤 php 文件返回的响应文本

javascript - 使用 jQuery 或 JavaScript 添加或更改 JSON 键的值