JavaScript 中的后缀运算符
Postfix operator in JavaScript
这是我认为的一道JS基础题,但就是找不到令我满意的答案。我正在 JavaScript 中学习运算符,但我无法理解以下后缀示例及其工作原理:
var x = 4;
var y = x++;
例如,当我提醒x时,它给了我5。但是当我提醒y时,它给了我4。我无法理解其背后的逻辑。
我明白,因为它是一个后缀,x 被分配给 y。而 y 只读 x,没有后缀。但是,如果我将它应用于不同的 var,为什么原始 x 会读取后缀呢?
如果我只是var y = x + 1
,原来的 x 将保持不变。但是当我使用 postfix 时情况并非如此。为什么我什至要用这种方法改变 x ?那我就不能去 var x = 4; x++;
吗?不用费心通过另一个变量来改变它吗?
如果这太基础了,我深表歉意,在此先感谢!
Why would I even change the x with this method?
对于一些有趣的简短形式,例如:
const array = [1, 2, 3];
let i = 0;
while(i < array.length) console.log(array[ i++ ]);
Couldn't I just go then var x = 4; x++; ?
是的,或者只是前缀,例如 ++x
或只是 x += 1
,这在大多数情况下更合适。
将增量运算符视为 return 某些东西的小函数会更容易。所以 x++
是一个递增 x
和 returns x
的原始值的函数,而 ++x
做同样的事情但是 returns新值。
这有时会派上用场,尤其是在您需要精确控制停止点的循环中。例如,比较:
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++)
你会得到无限递归。
这是我认为的一道JS基础题,但就是找不到令我满意的答案。我正在 JavaScript 中学习运算符,但我无法理解以下后缀示例及其工作原理:
var x = 4;
var y = x++;
例如,当我提醒x时,它给了我5。但是当我提醒y时,它给了我4。我无法理解其背后的逻辑。 我明白,因为它是一个后缀,x 被分配给 y。而 y 只读 x,没有后缀。但是,如果我将它应用于不同的 var,为什么原始 x 会读取后缀呢?
如果我只是var y = x + 1
,原来的 x 将保持不变。但是当我使用 postfix 时情况并非如此。为什么我什至要用这种方法改变 x ?那我就不能去 var x = 4; x++;
吗?不用费心通过另一个变量来改变它吗?
如果这太基础了,我深表歉意,在此先感谢!
Why would I even change the x with this method?
对于一些有趣的简短形式,例如:
const array = [1, 2, 3];
let i = 0;
while(i < array.length) console.log(array[ i++ ]);
Couldn't I just go then var x = 4; x++; ?
是的,或者只是前缀,例如 ++x
或只是 x += 1
,这在大多数情况下更合适。
将增量运算符视为 return 某些东西的小函数会更容易。所以 x++
是一个递增 x
和 returns x
的原始值的函数,而 ++x
做同样的事情但是 returns新值。
这有时会派上用场,尤其是在您需要精确控制停止点的循环中。例如,比较:
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++)
你会得到无限递归。