变量为0时的乘法赋值运算符

时间:2018-02-08 06:11:42

标签: javascript python

为什么Python REPL中以下操作的结果总是为0? (得到与C和Javascript相同的结果)

>>> a = 0
>>> a *= 1 + 1
>>> a
0

在上述情况下,乘法赋值是否应该等于a = a * 1 + 1?

>>> a = 0
>>> a = a * 1 + 1
>>> a
1

2 个答案:

答案 0 :(得分:3)

因为

a *= 1 + 1

相同
a = a *(1 + 1)

因为a为0,结果仍为0

答案 1 :(得分:0)

根据spec,首先评估表达式

  
      
  1. 让rref成为评估AssignmentExpression的结果。

  2.   
  3. 设r是将op应用于lval和rval的结果,就像评估表达式lval op rval 一样。

  4.   

因此,在应用操作和赋值之前,首先评估右侧的表达式。



var a = 2;
a *= 0 + 2;
console.log( "multiplication " + a ); //4 since 2*(0+2) is 4

a = 1;
a /= 0 + 2;
console.log( "division " + a ); //0.5 since 1/(0+2) is 0.5