やったこと

webサービスを作るときに考えたことを垂れ流します

Chromeのコンソールはconsole.log呼び出し時の値が出力されるわけではない

Chromejavascriptコンソールでデバッグしてたら、予想外の値が入っててちょっと混乱した。

例えば以下みたいなコード。

//Tesクラス生成
function Tes(){
  this.a = 1;
  this.b = 2;
};
var tes = new Tes();

//配列cに格納
var c = [];
c[0] = tes;

//cをログ出力
console.log(c);

//あとで3を代入
tes.b = 3;

console.logの出力では、tes.b=2が入ってると思ったんだけど、実際見てみるとtes.b=3が入ってる。

このとき、コンソールをよく見ると、ログ出力の右側にものすごい小っちゃく「?」のアイコンが出てる。

「?」のアイコンをクリックしてみたら、以下の文章が出てきた。

「object state below is captured upon first expansion」

つまり・・・この出力で表示されてるのは、console.log呼び出し時の値ではなくて、あとでコンソールを閲覧した時の値が入ってるということ?

リアルタイムの代入値を知りたかったら、breakで処理止めて観測した方がよさそうですな。。