gpt4 book ai didi

JavaScript:undefined++的结果是NaN,不是undefined?

转载 作者:行者123 更新时间:2023-11-29 10:55:36 26 4
gpt4 key购买 nike

第一个console.log输出是2。毫无疑问。
但是为什么第二个 console.log 输出不是未定义的?不应该一开始就输出undefined,然后变量b就变成NaN了吗?

var a = 2;
console.log(a++);

var b;
console.log(b++);

最佳答案

考虑一下:

b = "foo"
c = b++
console.log(c)

由于后缀 ++ 在递增之前返回值,我们期望 cfoo,然而,它是 NaN。这是为什么?

这是设计使然,并在标准(强调我的)中描述如下:

12.4.4.1 Runtime Semantics: Evaluation

UpdateExpression:LeftHandSideExpression++

  1. Let lhs be the result of evaluating LeftHandSideExpression.

  2. Let oldValue be ? ToNumber(? GetValue(lhs)).

  3. Let newValue be the result of adding the value 1 to oldValue, using the same rules as for the + operator (see 12.8.5).

  4. Perform ? PutValue(lhs, newValue).

  5. Return oldValue.

转换为准 JavaScript,上述算法将是:

 function postIncrement(someVariable) {
let oldValue = Number(someVariable.value); // Note "Number" here
let newValue = oldValue + 1;
someVariable.value = newValue;
return oldValue;
}

换句话说,value++ 不仅返回值,还返回转换为数字的值。转换发生在递增之前,并且由于 Number("foo")NaN,这就是我们得到的结果。

还有一个需要注意的 JavaScript 怪癖!

关于JavaScript:undefined++的结果是NaN,不是undefined?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58179814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com