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