Javascript 关于函数中数组的控制台日志行为
我错过了什么?我不明白为什么我的控制台在循环存在与否的情况下会表现出不同的行为Javascript 关于函数中数组的控制台日志行为,javascript,arrays,Javascript,Arrays,我错过了什么?我不明白为什么我的控制台在循环存在与否的情况下会表现出不同的行为 function findPath(){ var openArr = []; var closeArr = []; var morefun = {}; var morefun1 = {}; var morefun2 = {}; morefun.f = 1; morefun1.f = 2; morefun2.f = 3; openArr.push(morefun1); openA
function findPath(){
var openArr = [];
var closeArr = [];
var morefun = {};
var morefun1 = {};
var morefun2 = {};
morefun.f = 1;
morefun1.f = 2;
morefun2.f = 3;
openArr.push(morefun1);
openArr.push(morefun2);
openArr.push(morefun);
console.log(Array.isArray(openArr));
console.log(openArr);
console.log(openArr.length);
while (openArr.length){
var current = openArr.pop();
closeArr.push(current);
}
}
findPath();
我从console.log(openArr)获取信息
得到
[Object, Object,Object]
0:Object
1:Object
2:Object
length:3 // without while loop
它似乎是Chrome唯一的东西,因为我的Firefox控制台显示了类似的结果——当我点击一个数组获取详细信息时,我得到了长度:0和循环,长度:3 w/o。执行顺序是否缺少smth?当您向控制台写入内容时,它会创建一个表示当时对象状态的字符串。但是,它还存储对实际对象的引用,这就是您在控制台中看到的 展开该引用将显示其实际状态,其中字符串显示打印时的状态。如果您想通过每个
console.log
查看数组的完整状态,可以将其转换为JSON
console.log(JSON.stringify(openArr, null, 2));
例如:
var-arr=[{n:1},{n:2},{n:3}];
console.log(arr);//[对象,对象,对象]
arr.pop();
//展开数组,您将只看到2个元素
var arr2=arr.slice(0);
//要查看数组的完整状态,请将其序列化
console.log(JSON.stringify(arr2,null,2));//[{“n”:2},{“n”:3}]
console.log(arr2);//[对象,对象]
arr.pop();
//展开数组,您将只看到1个元素
,这是您的全部代码吗?我得到的结果都一样。你得到的结果是什么?对不起。。。我的错。这或许可以解释原因。
console.log(JSON.stringify(openArr, null, 2));