获取 NaN 而不是 Number
Getting NaN Instead of Number
我在使用下面的代码时遇到了一个小问题,而不是我得到的数字 NaN
。怎么了?
for (var i = 0; i<100; i++) {
x = i ^ i
result = x + result;
}
var y = result - (result ^ result);
console.log(y);
是NaN
因为你一开始没有初始化result
。
让我们看看脚本:
var result = 0;
var x;
for (var i = 0; i<100; i++) {
x = i ^ i
result = x + result;
}
这里是 运行 每个 i
的按位异或。由于 i
中的所有位都等于它们自己,因此 x
将始终为 0。 result
开始时为 0,每次向其添加 0,因此,在最后 result
的值为 0.
var z = result ^ result;
当你对 result
与自身进行异或运算时,result
的所有位都等于它们自身,因此结果将为 0。
var y = result - z;
你从 0 中减去 0,结果是 0。
A 异或 B = A <> B
按位级别
A XOR B 产生每个位的 XOR 结果。
更具体地说明你为什么得到 NaN
:正如@LajosArpad 所说,你实际上只做了 result = 0 + result;
100 次。
但是,由于您没有初始化 result
,它是 undefined
。 undefined
上的数学运算(例如 0 +
)将始终导致 NaN
。
我在使用下面的代码时遇到了一个小问题,而不是我得到的数字 NaN
。怎么了?
for (var i = 0; i<100; i++) {
x = i ^ i
result = x + result;
}
var y = result - (result ^ result);
console.log(y);
是NaN
因为你一开始没有初始化result
。
让我们看看脚本:
var result = 0;
var x;
for (var i = 0; i<100; i++) {
x = i ^ i
result = x + result;
}
这里是 运行 每个 i
的按位异或。由于 i
中的所有位都等于它们自己,因此 x
将始终为 0。 result
开始时为 0,每次向其添加 0,因此,在最后 result
的值为 0.
var z = result ^ result;
当你对 result
与自身进行异或运算时,result
的所有位都等于它们自身,因此结果将为 0。
var y = result - z;
你从 0 中减去 0,结果是 0。
A 异或 B = A <> B
按位级别
A XOR B 产生每个位的 XOR 结果。
更具体地说明你为什么得到 NaN
:正如@LajosArpad 所说,你实际上只做了 result = 0 + result;
100 次。
但是,由于您没有初始化 result
,它是 undefined
。 undefined
上的数学运算(例如 0 +
)将始终导致 NaN
。