+= (加等于)是如何工作的?

61

我对+=符号有点困惑。它是如何工作的?

  1. 1 += 2 // 等于什么?

  2. 还有这个

    var data = [1,2,3,4,5];
    var sum = 0;
    data.forEach(function(value) {
        sum += value; 
    });
    sum = ?
    

1
在执行 1 += 2 后,1 的值变为了3。这并不是什么大问题。但是 1 -= 1; 会让布尔表达式变得非常麻烦! - SF.
4
显而易见的是——你可以尝试在浏览器的JavaScript控制台中运行以下代码:在forEach之后,sum的值为15。 - Sam Dutton
不知道你可以使用值内联执行此操作。 - Zach
14个回答

89

1 += 2是语法错误(左侧必须是变量)。

x += yx = x + y 的简写形式。


这在JavaScript中非常有bug,根据JavaScript的说法: 198.51 -= 84.4 的结果是114.10999999999999 这是不正确的。 - Jean-Paul
26
@JpHouten的评论并不是关于这个答案的,但我觉得还是应该回复一下。首先,你要用 "-" 而不是 "-=",因为你不能直接将 198.51 减去 84.4,否则会产生错误。但更重要的是,这不是一个 bug。这只是计算机使用二进制表示数字而不是十进制的结果,而像 198.51 和 84.4 这样的数字无法在二进制中精确表示,必须四舍五入。这是浮点数的标准部分。如果您需要精确(而不是近似)的十进制计算,您应该使用定点数。 - Keith Irwin
实际上,x+=y 等同于 x = x + (y)。请看这个链接 https://stackoverflow.com/a/65325247/2913723。 - Md Sabbir Alam

32

1) 1 += 2 // 等于多少?

这是语法错误的。左侧必须是一个变量。例如:

var mynum = 1;
mynum += 2;
// now mynum is 3.

mynum += 2; 只是 mynum = mynum + 2; 的简写形式。

2)

var data = [1,2,3,4,5];
var sum = 0;
data.forEach(function(value) {
    sum += value; 
});

现在的总和为15。 展开forEach之后,我们有:

var sum = 0;
sum += 1; // sum is 1
sum += 2; // sum is 3
sum += 3; // sum is 6
sum += 4; // sum is 10
sum += 5; // sum is 15

19

这只是一个简写形式:

sum = sum + value;

13

+=在JavaScript(以及许多其他语言中)会将右侧的值加到左侧的变量上,并将结果存储在该变量中。因此,您提供的1 +=2示例是不正确的。这里有一个正确的示例:

var x = 5;
x += 4; // x now equals 9, same as writing x = x + 4;
x -= 3; // x now equals 6, same as writing x = x - 3;
x *= 2; // x now equals 12, same as writing x = x * 2;
x /= 3; // x now equals 4, same as writing x = x / 3;

在你的特定示例中,循环正在对数组data中的数字求和。


5

+= 运算符用于连接字符串或相加数字。

它会将你的 sum 变量增加与其相邻的值。

var sum = 0;
var valueAdded = 5; 

sum += valueAdded;

sum = 5


1
它连接字符串但添加数字。 - Paul
谢谢,保罗。连接可能不是最好的术语 ;) - cillierscharl
那么这是否意味着 += = .= 与 PHP 有关? - Mark Carpenter Jr

4

你需要知道:

  • 赋值运算符的语法是:variable = expression;

    因此,1 += 2 -> 1 = 1 + 2 不是有效的语法,因为左操作数不是一个变量。在这种情况下,错误是 ReferenceError: invalid assignment left-hand side

  • x += yx = x + y 的简写形式,其中 x 是变量,x + y 是表达式。

    求和的结果为15

      sum = 0;
      sum = sum + 1; // 1
      sum = sum + 2; // 3
      sum = sum + 3; // 6
      sum = sum + 4; // 10
      sum = sum + 5; // 15

其他赋值运算符的快捷方式与它们所引用的标准操作相同。


3

同时不要忘记当你混合类型时会发生什么:

x = 127;
x += " hours "
// x is now a string: "127 hours "
x += 1 === 0;
// x is still a string: "127 hours false"

2

你是不是想要得到“foo bar”?你应该在浏览器中尝试一下你的答案。 - Mark Carpenter Jr
通过小修改已经修复。之前写成了“不”,而不是Mark回复的“现在”。 - Keith Irwin

1

a += ba = a + b 的简写,意思是:

1)1 += 2 // 无法编译

2)15


1

在大多数编程语言中,那只是一种简写符号。它的意思是:

x=x+1;

我们可以对 x-=1,x*=1,x/=1 做同样的操作,也就是:

> x=x-1; x=x*1; x=x/1;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接