2016-03-22 7 views
1

ここでは何が欠けていますか?私のコンソールはループが存在するかどうかに応じて異なる動作をするのですか? console.logから取得関数内の配列に関するコンソールログの動作

function findPath(){ 
    var openArr = []; 
    var closeArr = []; 
    var morefun = {}; 
    var morefun1 = {}; 
    var morefun2 = {}; 
    morefun.f = 1; 
    morefun1.f = 2; 
    morefun2.f = 3; 
    openArr.push(morefun1); 
    openArr.push(morefun2); 
    openArr.push(morefun); 
    console.log(Array.isArray(openArr)); 
    console.log(openArr); 
    console.log(openArr.length); 

    while (openArr.length){ 
    var current = openArr.pop(); 
    closeArr.push(current); 
    } 
} 
findPath(); 

イム(openArr)

[Object, Object,Object] 
length: 0 // when while loop is there. 

そして、それは私のFirefoxのコンソールは、同様の結果を示しているようクローム唯一のものであるように思わdoesent

[Object, Object,Object] 
0:Object 
1:Object 
2:Object 
length:3 // without while loop 

を取得 - とき、私詳細については、配列をクリックしてください私は長さ:0ループと長さ:3 w/oを取得します。私は執行命令を怠っていますか?

+0

これは、すべてのコードですか?どちらの場合も同じ結果が得られます。 – Wainage

+0

どのような結果が得られますか? –

+0

申し訳ありません...私の悪い。これは理由を説明するかもしれない。 http://stackoverflow.com/a/23392650/4602928 – Wainage

答えて

2

コンソールに何かを書き込むと、その時のオブジェクトの状態を表す文字列が作成されます。ただし、実際のオブジェクトへの参照も格納されています。これがコンソールに表示されます。

拡大表示すると、文字列が表示される実際の状態は、の印刷時の状態はです。各console.logの配列の完全な状態を確認したい場合は、JSONに変換することができます。

console.log(JSON.stringify(openArr, null, 2)); 

例:

var arr = [{ n: 1 }, { n: 2 }, { n: 3 }]; 
 
console.log(arr); // [Object, Object, Object] 
 
arr.pop(); 
 
// Expand the array and you'll only see 2 elements 
 

 
var arr2 = arr.slice(0); 
 
// To see the full state of the array, serialize it 
 
console.log(JSON.stringify(arr2, null, 2)); // [ { "n": 2 }, { "n": 3 } ] 
 
console.log(arr2); // [Object, Object] 
 
arr.pop(); 
 
// Expand the array and you'll only see 1 element

+0

ああ、tyvmを参照してください。思ったことは間違っている.. –