为何这段极简JavaScript代码会出现运行崩溃问题?
问题排查:无限循环导致程序崩溃
嘿,我一眼就揪出了导致代码崩溃的核心问题——你的第二个for循环陷入了无限循环,直接把运行环境的内存耗干了!
问题代码分析
来看这段出问题的循环:
for (var z = 0; z < 2; z + 1) { everyTimeSlotArrayObjectBuilt['1'].push(z) }
这里的z + 1只是做了一次加法运算,但没有把运算结果赋值回z变量。也就是说,z的值永远停留在初始的0,永远满足z < 2的循环条件,循环会无休止地执行下去,直到浏览器或Node.js因为内存耗尽而崩溃。
修复方案
把循环的增量部分改成z++或者z += 1,这样每次循环都会让z的值递增,循环会正常执行2次后结束:
var everyTimeSlotArrayObjectBuilt = {} var thirtyToBeAdd = 0 for (var i = 0; i < 7; i++) { everyTimeSlotArrayObjectBuilt[i.toString()] = [] everyTimeSlotArrayObjectBuilt[i].push(i) } // 修复后的循环 for (var z = 0; z < 2; z++) { everyTimeSlotArrayObjectBuilt['1'].push(z) } console.log(JSON.stringify(everyTimeSlotArrayObjectBuilt))
额外小提示
顺便提一句,第一个循环里everyTimeSlotArrayObjectBuilt[i.toString()] = []之后,你用everyTimeSlotArrayObjectBuilt[i].push(i)其实也能正常工作——因为JavaScript对象的数字键会自动转换为字符串,所以i和i.toString()对应的是同一个键。不过为了代码可读性,建议保持键的写法一致,比如都用i.toString()或者直接用i(JS会自动处理转换)。
内容的提问来源于stack exchange,提问作者leo
相关产品推荐
相关产品推荐

