由于以下代码,我最近成为了我认为是 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 没有 property bar
, foo['bar'] 是未定义的,并且比较器永远不会返回 true (并结束循环)。
但这段代码最让我吃惊的是它不会崩溃。所以我很好奇 - 比较一个数字是否undefined
总是等于真的?因为程序无限循环,我知道比较不会返回 false。
为了测试,我将小于换成大于,但我仍然没有到达控制台输出。那么发生了什么?为什么这不会导致运行时错误,实际上是在比较什么?