我一直在尝试使用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)?
感谢帮助。
答案 0 :(得分:3)
这是Chrome和Safari控制台的怪癖。它不会立即评估数组以进行显示。
如果你.slice()
它,它会正常显示,因为数组只有原语。
console.log('Before:');
console.log(myArray.slice()); // <-- copy the Array
console.log(myArray.length);
console.log('---');