我在javascript中知道
x = y = z
表示x = z
和y = z
x+=z
表示x=x+z
;
因此,如果我想要x=x+z
和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+=z
和y+=z
希望我的解释有意义。无论如何,我现在要关闭这个问题。再次感谢。
答案 0 :(得分:20)
假设 添加,不连接,这可行:
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
答案 1 :(得分:10)
请使用:
x+=z;y+=z
老实说,其他任何事情都会导致其他人维持你的代码停止并抓住他们的头几分钟。这段代码也不长......“
答案 2 :(得分:6)
嗯,x + = 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;
答案 3 :(得分:3)
实际上x = y = z
并不代表x = z
和y = z
。它意味着计算表达式y = z
的值,然后为x指定该表达式的值。这是你错的地方。
答案 4 :(得分:3)
x+=(y+=z)-(y-z)
答案 5 :(得分:3)
您可以使用comma运算符:
x += (y+=z,z);
答案 6 :(得分:2)
它不起作用,因为在作业中做了什么
x += y += z;
是:
y += z
首先评估。除了将z
添加到x
之外,此分配还会返回新值y
作为其返回值。然后,y
的新值将成为另一个+=
的操作数。
x += y
好吧,没有简短的方法可以写出你想要的东西,而不仅仅是
x += z; y += z;
答案 7 :(得分: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"
答案 8 :(得分:-2)
这适用于jsfiddle,所以它一定是你正在做的其他事情......
x = 1, y = 2, z = 3;
x += y += z;
alert(x);