7

私はjavascriptで知っています

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

x+=z手段x=x+z;

だから私が望むならx=x+zy=y+zx+=y+=zは働かないようにしました

代わりに短いコードを書く方が良いアイデアがあるx+=z;y+=z

編集

私の質問に関わってくれたすべての人にまず感謝します。ここで、そもそもなぜこの質問をするのかを説明したいと思います。

のようなコードを書こうとしましたがx+='some html code'、そうする必要がありy+='the same html code'ます。当然、var z='the html code最初に別のものを作成したくx+=zありません。y+=z

私の説明が理にかなっていることを願っています。とにかく、私は今この質問を閉じます。再度、感謝します。

4

9 に答える 9

21

連結ではなく加算想定すると、これは機能します。

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 = x+zおよびy=y+zをx+= 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にその式の値を割り当てることを意味します。これはあなたが間違っているところです。x = zy = zy = z

于 2012-05-14T12:51:21.333 に答える
3

コンマ演算子を使用できます:

x += (y+=z,z);
于 2012-05-14T13:38:24.683 に答える
3

あなたもすることができます.. x = 1、y = 2、z = 3

x+=(y+=z)-(y-z)
于 2012-05-14T13:31:09.287 に答える
2

割り当てで行われているため、機能していません

x += y += z;

は:

y += z

最初に評価されます。に追加zするだけでなくx、この割り当てはの新しい値をy戻り値として返します。次に、この新しい値がy他ののオペランドになり+=ます。

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 に答える