【发布时间】:2013-09-12 20:18:43
【问题描述】:
由于以下代码,我最近成为了我认为是 javascript 中的无限 for 循环的受害者。
//Mongoose Schema, defined elsewhere
var foo = new Schema({
_id: Number,
a: [ Number ],
b: [ Number ] });
...
//loop code, running on node.js server
Foo.findOne({}, 'b').exec().then(function(result)
{
if(result)
{
for(var i = 0; i < result['a'].length; i++)
{
...
//oops, we used the wrong property!
}
console.log("This line is never reached!");
}
}
因为 foo 没有属性 bar,所以 foo['bar'] 是未定义的,并且比较器永远不会返回 true(并结束循环)。
但这段代码最让我惊讶的是它不会崩溃。所以我很好奇——将一个数字与undefined 进行比较总是等于真的吗?因为程序无限循环,我知道比较不会返回 false。
为了测试,我将小于换成了大于,但我仍然没有到达控制台输出。那么发生了什么?为什么这不会导致运行时错误,以及实际比较的是什么?
【问题讨论】:
-
Afaik
n < undefined总是返回false,尽管值是n。你测试过哪个浏览器?可能没有无限循环,只是一个错误停止执行...... -
从该代码中我只得到一个异常“无法访问
undefined(foo.bar) 上的length属性”,这导致该行永远无法到达。没有无限循环。请提供一个实际表现出所概述行为的示例代码…… -
"TypeError: foo.bar is undefined" 是我得到的错误
-
嗯。也许我的情况比我想象的要复杂。这是在通过 Mongoose.js 调用访问 Mongo 数据库结果的 Node.js 服务器上。我会看看我是否可以更好地了解代码,但我不确定我是否可以提供像 只是运行的 jsfiddle 之类的东西。
-
根据要求更新代码。
标签: javascript mongodb undefined