6

本「JavaScript: The Definative Guide, 6th edition」のセクション 4.13.5 には、次のように記載されています。

"i=0, j=1, k=2; evaluates to 2"

しかし、このように値を表示すると -

var x = i=0, j=1, k=2; alert(x); 

また

alert(i=0, j=1, k=2);

0が表示されます。実験したところ、 の値が何にi設定されていても表示されます。

本が間違っているようです。だれかがこの声明を言ってその本の意味を説明できますevaluates to 2か? 違いますか?

ありがとう!

4

3 に答える 3

6

alert( i = 0, j = 1, k = 2 );コンマで関数の引数を区切ります。

一般的な表現では、それは本が言うように機能します:

alert( ( i = 0, j = 1, k = 2 ) );

本が言っているのは、式が"i = 0, j = 1, k = 2" "evaluates to 2"多くの文脈で、本が意図しているように単一の独立した式であるためには、その式を括弧内に入れる必要があるということだけであることに注意してください。

変数宣言では、コンマも特別な動作をします。繰り返す必要がないので、より短い宣言を書くことができますvar

var a; var b; var c;var a, b, c;等しい。そうですvar a = 5; var b = 6; var c = 7;そしてvar a = 5, b = 6, c = 7;

コンマには、配列リテラルとオブジェクトリテラルでも特別な動作があります。

   var a = [1,2,3] //Creates an array with elements 1, 2 and 3
   var a = [(1,2,3)] //Creates array with one element: 3

   var b = {
       key: value, //Comma is separating the key-value pairs.
       key2: value2
   }
于 2013-03-07T09:14:40.433 に答える
4

これは、javascript ステートメントの優先順位に関するものであり、配置したコンマに対応する別のステートメント=を評価する前にすべて実行されます。

試してみるvar x = (i=0, j=1, k=2);と、あなたが望むものを手に入れることができます。

編集

コード行var x = i=0, j=1, k=2;では、実際には 3 つのステートメントとして解釈されます。

  1. var x=i=0
  2. var j=1
  3. var k=2

が期待さalert(x);0ます。

varコンマ演算子はステートメントでの実行優先度が比較的低いことに注意してください。したがって、変数を現在のスコープ内に保持する (優先度が最も低いキーワードの 1 つ)などのいくつかの例外を除いて、ほとんどの場合、前のキーワードを共有します。

于 2013-03-07T09:15:32.187 に答える
1

ここでコンマは、1 つではなく 3 つの引数を渡したという意味なので、アラートは他の 2 つの引数を適切に無視し、何も評価しません。使用する

alert((i=0, j=1, k=2));

var x = (i=0, j=1, k=2); alert(x);
于 2013-03-07T09:17:12.633 に答える