2013-08-07 13 views
9

私はGoogle Chrome version 28.0.1500.95 mコンソールを使用して、いくつかのJavaScriptをテストしてきた前に、Google Chromeのコンソールにログインし、それがどのように動作するかをもう少し理解を探しています:JavaScriptオブジェクトのプロパティを宣言

var obj = { 
    a: 99, 
    f: function() { } 
} 

console.log(obj.a) 
console.log(obj.z)  
console.log(obj) 

o.z = 100; 
:以下のコードを見てください

Demo

これは、以下の結果を出力します

99 
undefined 
Object {a: 99, f: function} 
a: 99 
f: function() { } 
z: 100 
__proto__: Object 

私の質問は、なぜある、あるzがログの後まで宣言されていなかったときに結果に表示されますか?

私はこれがコンソールの仕組みとJavaScriptで奇妙なスコープルールではないと思っていますが、私はそれを知らないのですか?

ここで何が起こっているのか教えていただけますか?

答えて

11

コンソールのオブジェクトは、最初にObjectと表示され、矢印をクリックすると展開されます。

I-アイコンは、あなたがオブジェクトを展開すると、あなたがそれを置くとあなたは答えが表示されますがあります:以下

オブジェクトの状態はあなたが後に見る何を最初の拡張時

を捕獲しています拡張時のオブジェクトの状態ではなく、あなたが呼び出すときに現時点の状態log()

+3

バージョン28でさえ、彼らが行った唯一の改善は、これが起こっているかなり発見できないツールチップを追加することです。 – Esailija

+0

私は配列の並べ替えをやっている:それらが異なる場合(つまり、私はここで配列を並べ替える)、それは私のスクリプトのロジックを間違って書いたことを意味ですか?最初に表示されるのは、展開されたリストに表示されるものと同じ順序ではないからです。 – efwjames

+0

コンソールの出力はあなたのスクリプトロジックとは関係ありません(たとえば、ログに予想される注文を得るために結合された配列を記録するかもしれません) –

関連する問題