我有这个Javascript对象,数据,我试图添加到堆栈。但是,我得到了一些非常奇怪的错误。如,
var data = {
"name" : "unknown",
"id": 1,
"children": [
{
"name": "test",
"id": 2,
"children": [
{
"name": "test",
"id": 4,
}
]
},
{
"name": "test",
"id": 3
}
]
};
var stack = [data];
console.log(stack); // output: undefined
while (stack.length > 0) {
console.log(stack); // output: undefined
var pop = stack.pop()
console.log(stack); // output: undefined
}
我唯一可以想象的是,当涉及while循环时,指向堆栈对象的指针存在某种问题。
有趣的是,当我从混合中取出while循环或向堆栈添加索引时,会返回正常值。例如,
var stack = [data];
console.log(stack); // [Object ... ] with the correct data
或
var stack = [data];
console.log(stack[0]); // [Object ... ] with the correct data
while (stack.length > 0) {
console.log(stack[0]); // [Object ... ] with the correct data
var pop = stack.pop()
console.log(stack); // [] as it should be...
}
有什么想法吗?
答案 0 :(得分:1)
如果有人使用自定义函数覆盖控制台对象,例如:console = {log: function() {}};
,console.log()
似乎输出未定义。
考虑一下:
console = {log: function() {}};
console.log(1); // undefined
delete console; // true
console.log(1); // 1
在Chrome中,您可以根据需要多次删除控制台对象,它将始终存在,但它将删除任何自定义对象。