2015-04-09 16 views
5

Birkaç dakika önce, javascript ile oynarken, console.log() garip bir davranış farkettim. Aslında "bozuk" değişkenleri günlüğe kaydedilir.Firefox'ta console.log() 'ın garip davranışı 37

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>

O #res içine değil tarayıcı konsoluna içine doğru değişkenleri (Firefox 37)

yazdırır

enter image description here

birisi bana neden bu açıklayabilir: aşağıdakilere bir göz atın olur?

+0

Tarayıcımın çıktısı ve konsolu Chrome ile eşleşiyor. – j08691

+0

Sorgunun Chrome yerine Firefox'a başvururken niçin çift olarak işaretlendiğini anlamıyorum. – DrKey

+1

Aynı temel sorun, bu nedenle yinelenen kararı görebilirim. – JasonMArcher

cevap

2

Yani, dizinin bir kopyasını alıyorsun böylece size günlüğü değiştirirseniz: beklendiği gibi

var arr = ["1", "2", "3"]; 
 
arr.push("4"); 
 
console.log(arr.slice()); 
 
arr.push("5"); 
 
console.log(arr.slice());

Her şey çalışır.

Aşağıdaki örnek canlı izleme herhangi bir kanıt göstermez, çünkü bir olasılık olarak izleme "canlı" indirim ediyorum:

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);

Bu günlüğü sıraya olduğunu ima ve sıra, diziye son itme işleminden sonra (muhtemelen javascript'iniz çalışmayı bitirinceye kadar) çalışmaz.

Güzel bulmak ... kesinlikle geliştiricilerin ilgisini çekebilecek bir şey.

+0

Evet, bir süre önce Chrome'da benzer davranışları fark ettim, günlüğe kaydetme işleminin nasıl yapıldığından emin değilim, ancak etkinlik tabanlı olabilir. Bu durumda, bir yerlerde bir tür ırk durumu olabilir. –