愿所有的美好和期待都能如约而至

JAVASCRIPT:未定义++的结果是NaN,不是未定义?

发布时间:  来源:互联网  作者:匿名  标签:error JavaScript: The result of undefined++ is NaN exception hoisting increment   热度:37.5℃

本文介绍了JAVASCRIPT:未定义++的结果是NaN,不是未定义?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

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

推荐答案

考虑一下:

数据-lang=”js”数据-隐藏=”假”数据-控制台=”真”数据-巴贝尔=”假”>

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

因为后缀++返回递增前的值,所以我们预计cfoo,但它是NaN。为什么会这样?

这是经过设计的,在标准(重点是我的)中描述如下:

12.4.4.1 Runtime Semantics: Evaluation

UpdateExpression:LeftHandSideExpression++

  1. 让LHS成为计算LeftHandSideExpression的结果。

  2. 让oldValue为?ToNumber(?GetValue(Lhs)。

  3. 让newValue为将值1与oldValue相加的结果,使用与+运算符相同的规则(请参见12.8.5)。

  4. 执行?PutValue(lhs,newValue)。

  5. 返回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:未定义++的结果是NaN,不是未定义?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,

勇敢去编程!

勇敢的热爱编程,未来的你一定会大放异彩,未来的生活一定会因编程更好!

TOP