JavaScript 条件评估为假?
JavaScript Condition evaluates to false?
我目前正在尝试通过解决 Project Euler 任务来熟悉 JavaScript。在下面的代码片段中,我试图获得低于 4.000.000 的所有偶数斐波那契数的总和。
var sum = 0;
var fibNums = [1, 2];
for (var i = 2; fibNums[i] < 4000000; i++) {
fibNums[i] = fibNums[i - 1] + fibNums[i - 2];
sum += fibNums[i] % 2 == 0 ? fibNums[i] : 0;
}
console.log(sum);
我的问题是 fibNums[i] < 4000000
的计算结果为 false,即使是第一个 运行。那是怎么来的?
简而言之: (fibNums[i = 2] === undefined)
,而(undefined < 40000 === false)
.
更长:
您使用 var i = 2
开始您的 for
循环,而 fibNums
数组仅包含 2 个元素并且索引以 0
开头。因此,fibNums[2]
将是 undefined
。在 JavaScript 中,undefined
永远不会小于一个数字,因为当您将任何数字与 undefined
进行比较时,它总是 false
.
var sum = 0;
var fibNums = [1, 2, 0];
for (var i = 2;fibNums[i] < 4000000; i++) {
fibNums[i] = fibNums[i-1] + fibNums[i-2];
sum += fibNums[i] % 2 == 0 ? fibNums[i] : 0;
fibNums.push(fibNums[i]);
}
alert(sum);
我目前正在尝试通过解决 Project Euler 任务来熟悉 JavaScript。在下面的代码片段中,我试图获得低于 4.000.000 的所有偶数斐波那契数的总和。
var sum = 0;
var fibNums = [1, 2];
for (var i = 2; fibNums[i] < 4000000; i++) {
fibNums[i] = fibNums[i - 1] + fibNums[i - 2];
sum += fibNums[i] % 2 == 0 ? fibNums[i] : 0;
}
console.log(sum);
我的问题是 fibNums[i] < 4000000
的计算结果为 false,即使是第一个 运行。那是怎么来的?
简而言之: (fibNums[i = 2] === undefined)
,而(undefined < 40000 === false)
.
更长:
您使用 var i = 2
开始您的 for
循环,而 fibNums
数组仅包含 2 个元素并且索引以 0
开头。因此,fibNums[2]
将是 undefined
。在 JavaScript 中,undefined
永远不会小于一个数字,因为当您将任何数字与 undefined
进行比较时,它总是 false
.
var sum = 0;
var fibNums = [1, 2, 0];
for (var i = 2;fibNums[i] < 4000000; i++) {
fibNums[i] = fibNums[i-1] + fibNums[i-2];
sum += fibNums[i] % 2 == 0 ? fibNums[i] : 0;
fibNums.push(fibNums[i]);
}
alert(sum);