我正在尝试在Ionic Framework中创建一个用于列表目的的数组,并检查所有callcenter名称的第一个char,将它们添加到字母数组中。
for (var i = 0; i < callcenterList.length; i++) {
var value = callcenterList[i]._owner && callcenterList[i]._owner.company.name[0];
if ((alphabet.indexOf(value) == -1 && isNaN(parseInt(value))) ||
(isNaN(alphabet[0]) && !isNaN(value))) {
if(!isNaN(value))
value = 123;
alphabet.push(value);
callcenterList.splice(i, 0, {
divider: {
alphabet: value
}
});
}
};
用value = 123
替换value = '#'
会导致Google Chrome和Google Chrome Canary出现故障,并立即在Mac中使用高达100%的内存。
这是一个Javascript错误还是与Google Chrome本身有关?
答案 0 :(得分:6)
这不是您的浏览器或其他任何内容中的错误:您只是创建了一个条件,您的代码进入无限循环,这往往会使浏览器陷入困境。您可以使用简单的while (true) {}
循环执行相同的操作。
具体而言,您正在迭代callcenterList
,并且随时isNaN(alphabet[0])
,您正在将新元素拼接到callcenterList
。 alphabet[0]
将具有您推送的第一个值,在您查看的条件中,您将设置为'#'
。
因此,isNaN(alphabet[0])
将永远为真。
因此,您将继续将值添加到callcenterList
。
因此i < callcenterList.length
永远都是真的。
答案 1 :(得分:1)
由于很难相信长度被重新评估,这里有一个简单的例子,说明你可能会遇到什么问题
如果没有break语句,代码将在无限循环中运行。 (检查控制台日志中列表的长度)
var list = [0,1,2,3];
for (var i = 0; i < list.length; i++) {
list.push(i);
if (i > 1000) {
break;
}
}
console.log( list.length );
&#13;
您的代码完全相同,只是您的拼接功能会在列表的特定位置添加新元素(nl,您的索引)。最后,它仍然会增加长度,你的列表将会更长