7

我知道在 javascript

x = y = z手段x = zy = z

x+=z手段x=x+z

所以如果我想要x=x+zand y=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

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

4

9 回答 9

21

假设 add 不是 concatenation,这有效:

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
于 2012-05-14T12:47:59.897 回答
10

只需使用这个:

x+=z;y+=z

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

于 2012-05-14T12:43:55.810 回答
6

那么,x += y += z 的意思是:

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

所以,用 x += y += z 来做 x = x + z 和 y = y + 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;
于 2012-05-14T12:52:28.770 回答
3

实际上x = y = z并不意味着x = zand y = z。这意味着计算表达式的值y = z,然后将 x 分配给该表达式的值。这是你错的地方。

于 2012-05-14T12:51:21.333 回答
3

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

x+=(y+=z)-(y-z)
于 2012-05-14T13:31:09.287 回答
3

您可以使用逗号运算符:

x += (y+=z,z);
于 2012-05-14T13:38:24.683 回答
2

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

x += y += z;

是:

y += z

首先被评估。除了添加zto之外x,此赋值还返回 的新值y作为其返回值。然后,这个新值y成为 other 的操作数+=

x += y

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

x += z; y += z;
于 2012-05-14T12:46:05.863 回答
1

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/(spidermonkey 实现的演示)


并不是说它与解决方案有很大关系,但是对于那些不喜欢原生.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"
于 2012-05-14T13:50:13.473 回答
-2

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

x = 1, y = 2, z = 3;
x += y += z;
alert(x);
于 2012-05-14T12:44:26.327 回答