第一个console.log的输出为2,毫无疑问。
但是为什么第二个console.log不是undefined呢?难道不应该先输出undefined,然后变量b变成NaN吗?
var a = 2;
console.log(a++);
var b;
console.log(b++);
第一个console.log的输出为2,毫无疑问。
但是为什么第二个console.log不是undefined呢?难道不应该先输出undefined,然后变量b变成NaN吗?
var a = 2;
console.log(a++);
var b;
console.log(b++);
b = "foo"
c = b++
console.log(c)
++
返回递增前的值,我们期望 c
是 foo
,但实际上是 NaN
。为什么会这样呢? function postIncrement(someVariable) {
let oldValue = Number(someVariable.value); // Note "Number" here
let newValue = oldValue + 1;
someVariable.value = newValue;
return oldValue;
}
value++
不仅返回值,还将其转换为数字。转换发生在增加之前,由于 Number("foo")
是 NaN
,因此我们得到的就是 NaN。在记录b之前,您需要为b分配值或检查null条件。 b为NaN,因为它的b ++是检查数值。
var a = 2;
这里你声明了一个变量"a",它的值为"2",使其数据类型为"整数"。
console.log(a++);
输出结果为2,变量“a”的值为“3”。
var b;
在这里,您声明了一个没有任何值的变量“b”,使其数据类型为“未定义”。
console.log(b++);
输出结果为NaN,因为变量“b”为空,因此无法应用递增运算符。
x++
的计算结果为Number(<x 的先前值>)
,而不是<x 的先前值>
,因为它是一个作用于数字的运算符。这个逻辑相当清晰,但实际上并不经常出现,它就是这样工作的。 - Ry-