0

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 を出力したときに、 myArray に既に値がある理由を誰かが説明できますか? そして、直後に正しい長さ (0) を出力するのはなぜですか?

助けに感謝します。

4

1 に答える 1

3

これは、Chrome と Safari のコンソールの癖です。表示のために配列をすぐに評価するわけではありません。

.slice()配列にはプリミティブしかないため、それが適切に表示されます。

console.log('Before:');
console.log(myArray.slice()); // <-- copy the Array
console.log(myArray.length);
console.log('---');
于 2012-04-09T01:54:10.007 に答える