Javascript 对象文字表示法的意外行为

Unexpected behavior with Javascript object literal notation

本文关键字:意外 对象 文字 表示 Javascript      更新时间:2023-09-26

我一直在尝试使用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)?

感谢您的帮助。

这是

Chrome和Safari控制台的一个怪癖。它不会立即评估数组以进行显示。

如果您.slice()它,它将正确显示,因为数组只有基元。

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