javascript - Firefox 30 数组处理中的 JavaScript 错误

标签 javascript firefox

有人可以向我解释一下 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/

相关文章:

asp.net - 如何将 javascript 连接到 .Net 中的 CustomValidator 控件

javascript - 在没有meta og标签的Facebook共享上指定图像,文本和标题

css - 响应式媒体查询在 Google Chrome 中不起作用

css - Firefox 中的 3D 转换问题

firefox - 在 Firefox (v57) 上的插件中使用 browser_style

javascript - 无法将数据获取到 React.js 组件

javascript - 基于文本字段的焦点生成表行

javascript - JS 库 : what's with the exclamation point in the comment block?

javascript - window.onerror 不在 Firefox 中触发

python-3.x - 如何从网站中提取图片src