console.log() 在 Firefox 37 上的奇怪行为
Strange behaviour of console.log() on Firefox 37
几分钟前,在玩 javascript 时,我注意到 console.log()
有一个奇怪的行为。事实上,它似乎记录了 "distorted" 变量。查看以下内容:
var res = document.getElementById("res");
var arr = ["1", "2", "3"];
arr.push("4");
res.innerHTML = JSON.stringify(arr)+'<br>';
console.log(arr);
arr.push("5");
res.innerHTML += JSON.stringify(arr);
console.log(arr);
<div id="res"></div>
它将正确的变量打印到 #res
但不打印到浏览器控制台 (Firefox 37)
有人能解释一下为什么会这样吗?
因此,如果您更改日志记录以便获取数组的副本:
var arr = ["1", "2", "3"];
arr.push("4");
console.log(arr.slice());
arr.push("5");
console.log(arr.slice());
一切正常。
我不考虑 "live" 跟踪的可能性,因为以下示例没有显示任何实时跟踪的证据:
var arr = ["1", "2", "3"];
console.log(arr);
var i;
i = setInterval(function(){
arr.push(1);
console.log(arr);
if(arr.length>10)clearInterval(i)
},1000);
这意味着日志记录已排队,并且队列不会 运行 直到最后一次推送到数组之后(可能直到您的 javascript 完成执行)。
不错的发现...肯定会吸引开发人员。
几分钟前,在玩 javascript 时,我注意到 console.log()
有一个奇怪的行为。事实上,它似乎记录了 "distorted" 变量。查看以下内容:
var res = document.getElementById("res");
var arr = ["1", "2", "3"];
arr.push("4");
res.innerHTML = JSON.stringify(arr)+'<br>';
console.log(arr);
arr.push("5");
res.innerHTML += JSON.stringify(arr);
console.log(arr);
<div id="res"></div>
它将正确的变量打印到 #res
但不打印到浏览器控制台 (Firefox 37)
有人能解释一下为什么会这样吗?
因此,如果您更改日志记录以便获取数组的副本:
var arr = ["1", "2", "3"];
arr.push("4");
console.log(arr.slice());
arr.push("5");
console.log(arr.slice());
一切正常。
我不考虑 "live" 跟踪的可能性,因为以下示例没有显示任何实时跟踪的证据:
var arr = ["1", "2", "3"];
console.log(arr);
var i;
i = setInterval(function(){
arr.push(1);
console.log(arr);
if(arr.length>10)clearInterval(i)
},1000);
这意味着日志记录已排队,并且队列不会 运行 直到最后一次推送到数组之后(可能直到您的 javascript 完成执行)。
不错的发现...肯定会吸引开发人员。