30

整数値を変数に設定することが期待されるJavaScriptコードがあります。

何かが壊れているので、やろうとすると。alert(A);が返されますNaNisNaN(A);trueを返します。しかし、私ならalert(typeof(A));、それは言うnumber

では、変数を同時に数値ではなく数値にするにはどうすればよいでしょうか。たぶん私はNaNが実際に何であるかを誤解しましたか?


編集:答えのおかげで、私は間違っていたことがわかります。理由は次のとおりです。

  • の種類NaNNumber
  • NaN「数ではない」という意味で、「タイプではない」と同じではありませんNumber
  • 0/0の良い例ですNaN:それはまだ数値ですが、JavaScript(そして他の誰も)はゼロの実際の値をゼロで割ったものを言うことができます。1/0一方Infinity、ではないを返しますNaN
4

6 に答える 6

23

私が理解しているように、これNaNはクラスの番兵インスタンスであり、Numberそれが表すものを正確に表します。つまり、適切に表現できない数値結果です。だから、それがそう0/0であるという意味で数ではありませんNaNが、それNumberそのタイプの観点からはです。

おそらくそれはNaRN(表現可能な番号ではない)と呼ばれるべきでした。

于 2010-07-09T17:35:25.427 に答える
14

変数があり、それに0/0の結果を割り当てる場合、変数はまだ数値型ですが、値は未定義です(数値ではありません)。これが発生する可能性のある他の条件がありますが、これはあなたが見ているものを示しています。

于 2010-07-09T17:34:58.843 に答える
1

オブジェクトのタイプとを混同しています。NaNは、タイプのオブジェクトにnumber割り当てることができる特定の値です。たとえば、ゼロをゼロで除算する場合や、数値を表さない文字列から数値を変換しようとする場合などです。

于 2010-07-09T17:37:17.980 に答える
1

ウィキペディアの記事をチェックしてください。詳細があります。

于 2010-07-09T17:41:43.227 に答える
1

W3Schools からのいくつかの定義:

Infinity: 正/負の無限大を表す数値

POSITIVE_INFINITY プロパティは無限大を表し、オーバーフロー時に返されます。NEGATIVE_INFINITY、負の無限大を表します (オーバーフロー時に返されます)。

NaN プロパティは「Not-a-Number」値を表します。このプロパティは、値が正当な数値ではないことを示します。

isFinite() 関数は、数値が有限で正当な数値であるかどうかを判別します。値が +infinity、-infinity、または NaN の場合、この関数は false を返します。

いくつかのテスト:

 var n1 = 1/0;
  var n2 = 0/0;
  var n3 = (Number.MAX_VALUE)*2; //overflow

  var b1 = Number.POSITIVE_INFINITY == n1;
  var b2 = Number.POSITIVE_INFINITY == n2;
  var b2n = Number.NEGATIVE_INFINITY == n2;
  var b3 = Number.POSITIVE_INFINITY == n3;

  var msg = "n1=" + n1 + ", n2=" + n2 + ", n3=" + n3;

  msg += "<br/> n1 Is POSITIVE_INFINITY=" + b1;
  msg += "<br/> n2 Is POSITIVE_INFINITY=" + b2;
  msg += "<br/> n2 Is POSITIVE_INFINITY=" + b2n;
  msg += "<br/> n3 Is POSITIVE_INFINITY=" + b3;

  msg += "<br/> n1 IsFinite=" + isFinite(n1);
  msg += "<br/> n2 IsFinite=" + isFinite(n2);
  msg += "<br/> n3 IsFinite=" + isFinite(n3);


  msg += "<br/> n1 + n1 =" + (n1 + n1) ;
  msg += "<br/> n1 - n1 =" + (n1 - n1) ;
  msg += "<br/> n2 + n1 =" + (n2 + n1) ;

  document.write(msg);

ショー

n1=Infinity, n2=NaN, n3=Infinity
n1 Is POSITIVE_INFINITY=true
n2 Is POSITIVE_INFINITY=false
n2 Is POSITIVE_INFINITY=false
n3 Is POSITIVE_INFINITY=true
n1 IsFinite=false
n2 IsFinite=false
n3 IsFinite=false
n1 + n1 =Infinity
n1 - n1 =NaN
n1 - n1 =NaN
于 2010-07-09T18:18:27.207 に答える
0

言われていることと一緒に、例えば文字列で割ると思います。NaNを返そうとしますが、それでも数値と見なします。

于 2010-07-09T17:39:24.683 に答える