2012-04-09 10 views
0

Javascriptオブジェクトのリテラル表記とプロトタイプの関数を使って実験していますが、わからないバグがあります。Javascriptオブジェクトのリテラル表記での予期しない動作

ここに関連するコードです:

var MyTestObj = { 

    myTestFunction: function() { 
    var myArray = [] 

    console.log('Before:'); 
    console.log(myArray); 
    console.log(myArray.length); 
    console.log('---'); 

    for (var mi = 0; mi < 5; mi++) { 
     myArray.push(1); 
    } 

    return myArray; 
    } 
} 

私はにconsole.log(MyArrayという)を呼び出すと、私は[]出力にそれを期待し、代わりに私はこれを取得:

> MyTestObj.myTestFunction() 
    Before: 
    [1, 1, 1, 1, 1] 
    0 
    --- 
    [1, 1, 1, 1, 1] 

誰かが理由を説明することができますが、 myArrayは、ループの前に出力したときに既に値を持っていますか?なぜすぐに正しい長さ(0)を出力しますか?

ヘルプを評価してください。

+2

http://stackoverflow.com/a/8249333/798880 – Saxoier

+0

が不気味遅い操作ですが、私はそれが実際に書き込みをするために周りの取得時点で...それはそこだけでパフォーマンスの問題だと思いますそれ、それは人口となっている。時折、私が破壊/クリアされるオブジェクトをログに記録し、そのプロパティにアクセスできない場合があります。 – JKing

答えて

3

これはChromeとSafariのコンソールのクールな機能です。配列の評価は表示されません。

.slice()の場合は、配列にはプリミティブしかないため、正しく表示されます。コンソールへのロギング

console.log('Before:'); 
console.log(myArray.slice()); // <-- copy the Array 
console.log(myArray.length); 
console.log('---'); 
+0

Chromeコンソール、そうですか?私はFirebugがそれをしないと思う。 – bfavaretto

+0

@bfavaretto:あなたはそれについて正しいと思います。間違いなくChromeで。私は更新します。 –

+1

パーフェクト、ありがとうございました。 –

関連する問題