JavaScript中的Postfix运算符

时间:2018-07-23 19:31:33

标签: javascript postfix-operator

我认为这是一个基本的JS问题,但是我找不到我满意的答案。我正在使用JavaScript学习运算符,但无法理解以下后缀示例及其工作方式:

var x = 4;
var y = x++;

例如,当我向x发出警报时,它给了我5。但是当我向y发出警报时,它给了我4。而且我无法理解其背后的逻辑。 我知道,因为是后缀,所以x分配给y。 y仅读取x,没有后缀。但是,如果我将其应用于其他var,为什么原来的x会改为读取后缀呢?

如果我刚做var y = x + 1,则原始x将保持不变。但是,当我使用后缀时,情况并非如此。为什么我什至要用这种方法改变x?我不能就这样var x = 4; x++;走吗?而不用通过另一个变量来更改它?

如果这太基础了,我深表歉意!

2 个答案:

答案 0 :(得分:1)

  

为什么我还要用这种方法来改变x?

一些有趣的简短形式,例如:

const array = [1, 2, 3];
let i = 0;
while(i < array.length) console.log(array[ i++ ]);
  

我不能就去var x = 4; x ++; ?

是的,或者只是前缀,例如++xx += 1,在大多数情况下更合适。

答案 1 :(得分:1)

将增量运算符视为返回某些内容的小函数会更容易。因此x++是一个使x递增并返回x的原始值的函数,而++x做同样的事情但返回新的值。

这有时会派上用场,尤其是在需要精确控制停止点的循环中。例如,比较:

let i = 0, j = 0;

while (++i < 5) {
    console.log(i) // stops at 4
}

while (j++ < 5) {
    console.log(j) // stops at 5
}

区别在于,while循环在增量之前求值,而在增量之后求值。

类似地,在递归函数中,您经常会看到类似以下内容:

function recurse(i) {
    if (i == 5) return i
    console.log(i)
    return recurse(++i)
}
console.log("final: ", recurse(0))

但是,如果您使用后缀return recurse(i++),则会得到无限递归。