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

标签 javascript object-literal

我一直在尝试使用 Javascript 对象文字表示法与带有原型(prototype)的函数,但遇到了一个我无法弄清楚的错误。

相关代码如下:

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('---');

关于javascript - Javascript 对象文字表示法的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10068141/

相关文章:

javascript - Isotope JS 库 - 卡片重叠

javascript - Sinon spy callCount 属性在某些测试中返回 0

javascript - 生成所有数字为 1-9 的随机整数

javascript - 对象文字中的引用变量?

javascript - 使用函数式编程过滤文字对象

Javascript + 基本对象字面范围问题

javascript - 如果对象的成员之间存在依赖关系,是否可以使用文字符号初始化对象?

javascript - 检查多个选择下拉列表中的重复值

javascript - AngularJS 调用函数,其名称构造为字符串

Javascript 'normal' 对象与模块模式