有人可以向我解释一下 Firefox 中的这种行为吗?
减少代码片段
function Calc(val,str, cmd,stack)
{
console.log(str, cmd, stack);
while(c = cmd.pop())
{
if (c=='0') stack.push(val);
}
console.log(str,cmd, stack)
}
var k,i,l,s;
k=3;
for (i=1;s=i.toString(6), !s[k]; i++)
{
l=s.split(0).length;
if (l+l-1==s.length)
{
Calc(1,s, (s+'00').split(''), [])
}
}
JSFiddle:http://jsfiddle.net/eQKTX/1/
在 Firefox 30.0 中,从某个时刻开始,字符串 split 不再起作用。
我尝试使用 split 和 spread 运算符 [...],结果是一样的。
我认为 Calc 函数内的 cmd.pop
是罪魁祸首。 Pop 确实更改了数组,但该函数应在每次调用时获取一个全新的数组。
它在 Chrome 和 MSIE 10 中完美运行
最佳答案
我不确定代码的作用, 但我确认 Chrome 和 Firefox 中记录的数据是不同的。
在 Chrome 中
1 ["1", "0", "0"] []
1 [] [1, 1]
...
在火狐浏览器
"1" Array [ ] Array [ 1, 1 ]
"1" Array [ ] Array [ 1, 1 ]
...
我猜原因是 console.log
在 Firefox 中异步运行。
这可能是相关的错误: https://bugzilla.mozilla.org/show_bug.cgi?id=754861#c7
当调用前面的console.log
时,stack
是空数组,
但是 stack
在调用后立即被修改,
修改后的数据用于记录。
如果我将 JSON.stringify
添加到 console.log
,Chrome 和 Firefox 都会输出相同的日志,
所以我想没有其他不同的行为。
console.log(JSON.stringify([str, cmd, stack]));
关于javascript - Firefox 30 数组处理中的 JavaScript 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24324040/