x+=y+=z in Javascript

x+=y+=z in Javascript

本文关键字:Javascript in      更新时间:2023-09-26

我知道在javascript中

x = y = z意味着x = zy = z

x+=z的意思是x=x+z;

所以如果我想要x=x+zy=y+z,我尝试x+=y+=z不起作用

任何人都有更好的主意来编写短代码而不是x+=z;y+=z

编辑

首先感谢参与我问题的每个人。在这里,我想解释一下为什么我首先要问这个问题。

我尝试编写一些类似x+='some html code'的代码,我需要y+='the same html code'。所以我自然不想先创建另一个var z='the html code然后做x+=zy+=z

希望我的解释有意义。无论如何,我现在要结束这个问题。再次感谢。

假设 加法而不是串联,这有效:

x -= y - (y += z);

但说真的,不要使用它


对于那些想要弄清楚如何做的人,评估顺序(我使用 n 来显示当前的中间结果)大致为:

n = y1 = y0 + z  //    n = y = (y + z)
n = y0 - y1      // -> n == -z  [uses the original value of y]
x -= n           // -> x += z

只需使用这个:

x+=z;y+=z

老实说,其他任何事情都会导致维护您的代码的其他人停下来并挠头几分钟。 这段代码也不是很长...

那么,x += y += z 表示:

    x
  1. = x + y + z
  2. y
  3. = y + z

因此,不可能用 x += y += z 和 y = y + z 来做 x = x + z 因为这意味着:

x += (y = y + z) -> x = x + (y = y + z)

举个例子:

function sum () {
  var x = 5, y = 7, z = 3;
  x += y += z;
  console.log (x); // it shows 15 --> x = 5 + 7 + 3
  console.log (y); // it shows 10 --> y = 7 + 3
  console.log (z); // it shows 3
}

因此,您必须执行以下操作:

x += z;
y += z;

实际上x = y = z并不意味着x = zy = z。这意味着计算表达式y = z的值,然后为该表达式的值赋值 x。这就是你错的地方。

你也可以这样做。 x = 1, y = 2, z=3

x+=(y+=z)-(y-z)

您可以使用逗号运算符:

x += (y+=z,z);

它不起作用,因为在作业中做了什么

x += y += z;

是:

y += z

首先进行评估。除了将z添加到x之外,此赋值还返回新的值y作为其返回值。然后,这个新的y值成为另一个+=的操作数。

x += y

好吧,可能没有比简单地写你想要的东西更短的方法了

x += z; y += z;

FWIW,在 Firefox 中,您可以使用解构赋值来做你想要的事情。

Array.prototype.addToEach = function(x) { 
    for (var i = 0; i < this.length; i++) 
        this[i] += x; 
    return this; 
};
var x = "foo", y = "bar";
[x,y] = [x,y].addToEach("baz");
console.log(x,y); // "foobaz" "barbaz"

http://jsfiddle.net/uPzNx/(蜘蛛猴实现演示)


并不是说它与解决方案有太大关系,但对于那些不喜欢本机.prototype扩展的人来说,您可以这样做。

function addToEach(s) { 
    var args = Array.prototype.slice.call(arguments, 1); 
    for (var i = 0; i < args.length; i++) 
        args[i] += s;
    return args;
};
var x = "foo", y = "bar";
[x,y] = addToEach("baz", x, y);
console.log(x,y); // "foobaz" "barbaz"

这适用于 jsfiddle,所以它一定是你正在做的其他事情......

x = 1, y = 2, z = 3;
x += y += z;
alert(x);