Javascript i--i=i-1,计算结果不一样
我以为Javascript i--i=i-1,计算结果不一样,javascript,evaluation,Javascript,Evaluation,我以为I--是I=I-1的缩写,但我发现两者的计算结果不同: var i=1; 而(i=i-1){…} 在本例中,i为0,其计算结果为false。这正如预期的那样有效 var i=1; 而(我…){…} i应该是0并计算为false,但它不是。它的计算结果为true。这是一个bug,还是有原因?只有在计算循环条件之后,但在循环中的语句之前,才会计算i--。这是递减后缀运算符。这意味着循环条件中的条件最初的计算结果将是true。这将触发循环体中语句的执行。当循环主体中的语句将被执行时,由于i已
I--
是I=I-1
的缩写,但我发现两者的计算结果不同:
var i=1;
而(i=i-1){…}
在本例中,i
为0
,其计算结果为false
。这正如预期的那样有效
var i=1;
而(我…){…}
i
应该是0
并计算为false
,但它不是。它的计算结果为true
。这是一个bug,还是有原因?只有在计算循环条件之后,但在循环中的语句之前,才会计算i--
。这是递减后缀运算符。这意味着循环条件中的条件最初的计算结果将是true
。这将触发循环体中语句的执行。当循环主体中的语句将被执行时,由于i
已被减1,因此它将等于0。因此,循环条件的计算结果将为false
,循环体中的语句将不会再次执行。仅在计算循环条件之后,但在循环中的语句之前,才会计算i--
。这是递减后缀运算符。这意味着循环条件中的条件最初的计算结果将是true
。这将触发循环体中语句的执行。当循环主体中的语句将被执行时,由于i
已被减1,因此它将等于0。因此,循环条件的计算结果将为false
,循环体中的语句将不会再次执行。执行i--
时,使用i
的值,然后递减。但是对于前缀--1
运算符,它是不同的,如中所示,它将被递减然后使用
为什么要解释上述情况?
当你使用pre-fix和post-fix操作符的时候,我会告诉你后面到底发生了什么,虽然这并不主要关心这个问题,但我认为最好知道
现在是实际答案
i=i-1
所做的是它在遇到代码时立即求值,因此i
实际上是0
,可以说它的作用类似于预固定减量运算符,在这种情况下,但是当第一次计算while
中使用的条件时,i--
仍然是1
,当第二次检查while
条件时,它是0
,这是错误的,因此循环结束。,使用i
的值,然后递减。但是对于前缀--1
运算符,它是不同的,如中所示,它将被递减然后使用
为什么要解释上述情况?
当你使用pre-fix和post-fix操作符的时候,我会告诉你后面到底发生了什么,虽然这并不主要关心这个问题,但我认为最好知道
现在是实际答案
i=i-1
所做的是它在遇到代码时立即求值,因此i
实际上是0
,可以说它的作用类似于预固定减量运算符,在这种情况下,但是当第一次计算中使用的条件时,i--
仍然是1
,当第二次检查中使用的条件时,它是0
,这是错误的,因此循环结束。您应该使用--i
作为预减量运算符
参见文档您应该使用--i
作为预减量运算符
参见文档i--
在循环中使用时与i=i-1
不同
i--
将在条件之后但在循环内容运行之前求值,而i=i-1
将在条件之前求值,因此求值为false
我想在这方面,--I
更类似于I=I-1
,因为它也是在条件之前进行评估的
你可以想到
while (i--) {...}
等同于
while (i = i - 1, i + 1) {...}
在循环中使用时,i--
与i=i-1
不同
i--
将在条件之后但在循环内容运行之前求值,而i=i-1
将在条件之前求值,因此求值为false
我想在这方面,--I
更类似于I=I-1
,因为它也是在条件之前进行评估的
你可以想到
while (i--) {...}
等同于
while (i = i - 1, i + 1) {...}
--i
是相关的--i
是对PHP文档的相关删除引用(我没有读这个问题)。添加了对JavaScript文档的引用。删除了对PHP文档的引用(我没有读这个问题)。添加了对JavaScript文档的引用。“只有在执行第一个循环后才会计算i-。-否,i
将在计算循环条件后,但在循环中的语句之前递减。@nnnnnn感谢您的评论。我将更新我的帖子。这意味着while(I--){…}
本质上与while(I){I-=1;}
?@Afterlame-while(I--){}
与while(I--=1;}
不完全相同,因为如果i
在while语句之前为0,那么在前者之后为-1,即使循环体没有运行;在后者之后,i
仍然是0.Yes。首先使用i
的原始值来决定是否执行循环,然后更改i
的值,然后(可能)将执行循环体。“只有在执行第一个循环后才会计算i-”-否,i
将在计算循环条件之后,但在