JavaScript在-/递减中的逻辑是什么?有人能澄清一下吗?

JavaScript在-/递减中的逻辑是什么?有人能澄清一下吗?,javascript,Javascript,++增量 x = ++y // When y = 6 x = 6 x = y++ // And y = 6 x = 5 x = --y // When y = 4 x = 4 x = y-- // When y = 4 x = 5 --减量 x = ++y // When y = 6 x = 6 x = y++ // And y = 6 x = 5 x = --y // Whe

++增量

x = ++y     // When y = 6   x = 6   
x = y++     // And y = 6    x = 5   
x = --y     // When y = 4   x = 4   
x = y--     // When y = 4   x = 5
--减量

x = ++y     // When y = 6   x = 6   
x = y++     // And y = 6    x = 5   
x = --y     // When y = 4   x = 4   
x = y--     // When y = 4   x = 5
有人能澄清一下吗?
谢谢。

唯一有点棘手的情况是:

x = --y     // When y = 4   x = 4
之后您必须查看
y
。如果在前面查看
y
,您会看到
5

前缀减量(
--y
)和后缀减量(
y--
)的基本规则是:

  • 无论哪种方式,操作数(
    y
    在本例中)递减1。唯一的区别是该表达式(
    --y
    y--
    )的结果是什么

  • 如果运算符在操作数(
    --y
    )之前,则为“前缀”减量:减量发生在表达式的结果之前。因此,结果是递减后的
    y

  • 如果运算符在操作数(
    y--
    )之后出现,则它是一个“后缀”递减:递减发生在表达式的结果获得之后。因此,结果是递减之前的值

示例:

var x,y;
y=5;
log(“前缀减量前:y=“+y”);
x=--y;//结果是**减量后的**值
log(“前缀减量后:x=“+x+”,y=“+y”);
y=5;
log(“后缀减量前:y=“+y”);
x=y——;//结果是**减量之前**的值
log(“后缀减量后:x=“+x+”,y=“+y”)

唯一稍微棘手的情况是:

x = --y     // When y = 4   x = 4
之后您必须查看
y
。如果在前面查看
y
,您会看到
5

前缀减量(
--y
)和后缀减量(
y--
)的基本规则是:

  • 无论哪种方式,操作数(
    y
    在本例中)递减1。唯一的区别是该表达式(
    --y
    y--
    )的结果是什么

  • 如果运算符在操作数(
    --y
    )之前,则为“前缀”减量:减量发生在表达式的结果之前。因此,结果是递减后的
    y

  • 如果运算符在操作数(
    y--
    )之后出现,则它是一个“后缀”递减:递减发生在表达式的结果获得之后。因此,结果是递减之前的值

示例:

var x,y;
y=5;
log(“前缀减量前:y=“+y”);
x=--y;//结果是**减量后的**值
log(“前缀减量后:x=“+x+”,y=“+y”);
y=5;
log(“后缀减量前:y=“+y”);
x=y——;//结果是**减量之前**的值
log(“后缀减量后:x=“+x+”,y=“+y”)

当运算符位于变量前面时,它会在任何处理之前更改其值。当变量位于运算符之前时,值在处理后更改

y=++x
与以下内容相同:

x = x + 1;
y = x;
y = x;
x = x + 1;
并且
y=x++
与:

x = x + 1;
y = x;
y = x;
x = x + 1;

当运算符位于变量之前时,它会在任何处理之前更改其值。当变量位于运算符之前时,值在处理后更改

y=++x
与以下内容相同:

x = x + 1;
y = x;
y = x;
x = x + 1;
并且
y=x++
与:

x = x + 1;
y = x;
y = x;
x = x + 1;

在这两种情况下,
y
将具有相同的最终值。唯一的区别在于表达式本身的返回值

  • ++y
    将在
    递增后返回值
  • y++
    将在
    递增之前返回值

在这两种情况下,
y
将具有相同的最终值。唯一的区别在于表达式本身的返回值

  • ++y
    将在
    递增后返回值
  • y++
    将在递增之前返回值

  • 因为你的主要问题是:

    背后的逻辑

    这一部分的答案就是处理器。许多人已经有了
    INC
    DEC
    指令很长一段时间了,而且由于C是为了匹配处理器指令而创建的,因此人们认为拥有
    ++
    --
    等操作符将有助于优化某些代码

    INC WORD [BP+4]    ; increment value at address BP+4 by one
    
    DEC WORD [SP+16]   ; decrement value at address SP+16 by one
    
    RISC处理器通常要求您使用
    ADD
    SUB
    。在现代处理器中,结果几乎相同,因为这类指令的执行速度大大提高,特别是在指令缓存较大的情况下

    Java和JavaScript是C语言的产物,因此继承了这些语言

    具体而言,68000处理器的指令如下:

    MOV.W D1, (A1)+    ; copy D1 at address A1, then increment A1 by size of D1
    
    MOV.W D2, -(SP)    ; decrement stack by size of D2, then copy D2 at address SP
    
    其中包括指令中的隐藏增量(the+)和隐藏减量(the-)

    在这些情况下,C与处理器行为完全匹配。你可以这样写:

    *a1++ = d1;
    
    *--sp = d2;
    
    在汇编语言中,每一行就变成一条指令。请注意,与堆栈一起使用的
    ++
    --
    工作起来很有魅力:

    *--sp = d1;  // move the stack pointer, then save value on the stack
    ...          // do some work
    d1 = *sp++;  // restore from the stack, then move the stack pointer back
    
    这里我们想使用寄存器d1,所以我们将它保存在堆栈上,自动预减量完全按照需要工作。然后在离开函数之前,我们从堆栈中恢复,同样,自动后增量完全按照预期工作。英特尔处理器有专门的指令:
    PUSH
    POP
    。但这是同一个概念

    当然,用C++和其他面向对象语言(包括java和javcript),现在和我已经有了很大的发展。