为什么使用numeric.toString()作为数组键会导致我的脚本卡住

时间:2017-06-19 18:39:58

标签: javascript arrays

我发现自己做了类似的事情:

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。这不是一个问题,但我想了解这种行为,我是否应该做一些不同的事情?

1 个答案:

答案 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