1

Javascriptコード

var a = {};
a.test += 1; //NaN
++a.test; //NaN

その代わり

var a = {};
a.test = 0;
++a.test; //1
a.test += 1; //2

とにかく、最初のコードサンプルを2番目と同じように機能させることができるのではないかと思います。つまり、0に明示的に割り当てる必要はありません。代わりに、オブジェクトのプロパティのデフォルト値を0に割り当てる場合と同様ですundefined。node.jsでこれを実行しようとしています。したがって、クロスブラウザの問題や古いECMA仕様の問題はありません。

var i;
for(i = 0; i<10; i++) {
   if(a.test) {
     ++a.test;
   } else {
     a.test = 0;
     ++a.test;
   }
   //a.test = a.test || 0; (1)
   //++a.test;
}

可能であれば、上記のコードの内部のif / elseまたは代入ステートメント(1)を削除できます。

4

6 に答える 6

4

デフォルトでは、Javascript はすべての新しい変数を undefined (明示的に定義されていない場合) として定義します。これは、定義しようとしている Number オブジェクトとは異なります。したがって、次のように使用する必要があります。

for (i=0; i<10; i++) {
    a.test = a.test || 0;
    ++a.test
}
于 2012-05-01T09:05:49.547 に答える
3

任意の未定義のプロパティに対してこれを行う方法はありません。

既知のプロパティ名の場合、方法はありますが、使用しないでください !! 1

Object.prototype.test = 0;

これにより、すべてのオブジェクトにその値を持つ暗黙のプロパティが与えられ.test、最初に変更しようとすると、結果が独自のオブジェクトに格納されます。

> Object.prototype.test = 0
> a = {}
> a.test++
> a.test
1

1に何かを追加するObject.prototypeと、次のものを含むものが壊れますfor (key in obj)

于 2012-05-01T09:06:43.573 に答える
1

これは、javascript でプロトタイプが役立つ場所です。

function Demo() {
}
Demo.prototype.x = 0;

 

> a = new Demo();
> a.x += 1
> a.x
1

 

> b = new Demo()
> b.x
0
于 2012-05-01T09:07:26.060 に答える
0

これでうまくいくと思います:

var a = {"test":0};
a.test += 1; 
于 2012-05-01T09:16:41.913 に答える
0

最初のコードでは、できません。非数値または NaN 値に数値を追加すると、常に次のようになります。NaN

var a = {};
a.test += 1; // undefined + 1 = NaN
++a.test;    // ++(undefined) = NaN

インナーに関してはif

for(i = 0; i<10; i++) {
   a.test = a.test || 0; //use existing value, or if undefined, 0
   ++a.test;             //increment
}
于 2012-05-01T09:03:41.120 に答える
-1

標準の JS を使用すると、求めていることを実行できません。プロトタイプしない限り?しかし、私はプロトタイプの経験がありません。また、プロトタイプが Node.js で機能するとは思いません。

この理由は、js が型付き言語ではないためです (つまり、var のみを使用して変数を宣言し、int a または string b は使用しません)。したがって、++ 演算子を使用するには、変数に型を指定する必要があります。割り当て。

それが役立つことを願っています

于 2012-05-01T09:07:09.977 に答える