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