奇怪的Javascript输出

时间:2015-04-24 10:21:05

标签: javascript arrays stack undefined

我有这个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...
}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果有人使用自定义函数覆盖控制台对象,例如:console = {log: function() {}};console.log()似乎输出未定义。

考虑一下:

console = {log: function() {}};
console.log(1); // undefined
delete console; // true
console.log(1); // 1

在Chrome中,您可以根据需要多次删除控制台对象,它将始终存在,但它将删除任何自定义对象。