我发现自己做了类似的事情:
function populateDueJob (unixTimeStamp, valueToPush) {
// note: this is a nested function so dueJobs is declared outside.
// it's declared as: let dueJobs = []
unixTimeStamp = unixTimeStamp.toString()
if (dueJobs.indexOf(unixTimeStamp) === -1) {
dueJobs.push(unixTimeStamp)
dueJobs[unixTimeStamp] = []
}
dueJobs[unixTimeStamp].push(valueToPush)
}
这允许我有一个unix时间戳,只需使用索引查找即可获得所有作业。我发现的是,即使我正在调用toString()
,索引也被转换(?)/视为一个int,它会导致我的脚本被卡住(我不是100%确定如何完成并导致chrome显示卡住的脚本对话框。
要解决此问题,我已完成unixTimeStamp = 'idx_' + unixTimeStamp
。这不是一个问题,但我想了解这种行为,我是否应该做一些不同的事情?
答案 0 :(得分:1)
如果dueJobs
是一个数组,索引设置器[]
会尽可能将参数视为整数(第一次推送到dueJobs似乎不需要)。如果变成对象,则可以将该属性视为字符串
var arr= ['a'], obj = {0:'a'},prop = '1';
arr[prop] = 'b';
console.log(arr);
obj[prop] = 'b';
console.log(obj);
但是如果允许ES6(似乎是,因为使用了let
),也可以使用Map。