質問

を出てすぐの好奇心をかきたてた。

ていることに対して非常のアプローチを行うことが合理的 typeof NaN はい。のように NaN === NaN または NaN == NaN falseを返すにあります。この特殊性のjavascript、それは理由のために。

編集:彼の答えなのです。いやったものヘッド周辺のものです。読み応答のwikiの中で理解しやすくなりますが、それでも、文様

と比較するNaNを返順序付けの結果をもと比較しても、そのものです。の比較述語からのシグナル非シグナル伝達のシグナルバージョン信号が無効な例外ならない。の平等や格差に述語は、非シグナルでx=xはfalseを返して使用できる試験の場合、xの閑静なものがあります。

けんいました。誰かができるならこんにちは人間ではない数学者)読みや言語、そしてgratefull.

役に立ちましたか?

解決

これません。ではない特異性が浮かび上がjavascriptのが普通コンピューター科学原則とします。

から http://en.wikipedia.org/wiki/NaN:

は大きくわけて三種類あり操作 るNaNを返し:

業務NaNとして少なくとも一つのオペランド

不定形

  • の部門0/0, ∞/∞, ∞/−∞, −∞/∞, と∞/−∞
  • のmultiplications0×∞0×−∞
  • 電力1^∞
  • に追加∞ + (−∞), (−∞) + ∞ 等subtractions.

実質業務の複雑な結果:

  • の平方根の負の数
  • の対数に負数
  • の接の奇複数の90°(またはπ/2ラジアン)
  • の逆正弦やコサインの番号が-1未満または 以上+1.

これらすべての値が同じでなければならない。簡単なテストNaNは試験 value == value はfalseです。

他のヒント

さて、NaNまだ数値であるの種類の、事実にもかかわらず、それは実際にはない-A-数の略: - )

(それが合うように丸められなければならないすべての数のために言うことができるが、NaNは特別な場合であるが)。

NaNは単に特定の値は、数値型の制限内で表現することができないことを意味します それらは、異なる値であってもよいので、

は、特定のNaNは、別NaNに等しいと見なされません。しかし、NaNはちょうど2718または31415のように、まだ数タイプです。

<時間>

普通の言葉で説明するために、あなたの更新の質問に同様ます:

  

のNaNとの比較は、常に自分自身と比較した場合であっても順不同結果を返します。比較述部は、いずれかのシグナリングまたは非シグナリングは、シグナリング・バージョンはそのような比較のために無効例外を信号です。等式および不等式述語は、非シグナル伝達されるようにX = X Xは静かNaNであるかどうかをテストするために使用することができる偽を返す。

すべてのこの手段は、(部分に分割される)

  

のNaNとの比較は、常に自分自身と比較した場合であっても順不同結果を返します。

基本的に、NaNも含めて別のNaNを含む、任意の他の数に等しく、およびされていない自体

  

比較述語は、シグナリングまたは非シグナリングのいずれかで、シグナリング・バージョンはそのような比較のために無効例外を通知

NaNとのいずれかの例外が発生することができます別の番号の間の操作(などより大きい未満)の比較を実行しようとするとスローされ(非シグナルまたは静か)(シグナリング)または単に結果として偽の取得ます。

  

は等価と不等式述語が非シグナリングされるので、X = X Xは静かNaNであるかどうかをテストするために使用することができる偽を返す。

が等しいかどうかを判定し(等しくないに等しい)は、例外原因それらを使用しませんので、シグナリングされることはありません。あなたは、通常の数のxを持っている場合は、x == xは常にtrueになります。 xNaNであれば、x == xは常にfalseとなります。それはあなたに(静かに)簡単にNaNを検出する方法を与えてます。

は、ECMAScript(JavaScript)を標準を指定する NumbersIEEE754 山車は、 NaN としての可能な値です。

ECMA262 5e部4.3.19:数値

プリミティブ値に対応する倍精度の64ビットのバイナリ形式IEEE754値です。

ECMA262 5e部4.3.23:NaN

数値であるIEEE754"非数"の値です。

IEEE754 をWikipediaで調べる

IEEE標準の浮動小数点演算には技術基準の研究所電気電子技術者が、最も広く使用されている標準のための浮動小数点計算の[...]

標準の定義

  • 演算式:セットのバイナリおよび浮動小数点データの有限数を含む署名の零点をsubnormal番号)、infinities、 特殊"でない数値NaNs)

[...]

typeof NaN を返します 'number' するためには、多くの

  • ECMAScript仕様によると、数式を含むNaN:

    4.3.20数型

    設定の全ての可能な数値を含む特別な"非数" (NaN)値が正の無限大の場合、負の無限大に近づくように

  • なので typeof を返すめ

    11.4.3のtypeofオペレーター

    の生産 UnaryExpression : typeof UnaryExpression は 評価としており

    1. ましょう val の結果を評価する UnaryExpression.
    2. の場合 タイプ(val参考, その
      1. の場合 IsUnresolvableReference(valtrue, 戻 "undefined".
      2. ましょう val すると GetValue(val).
    3. 文字列を返しが決定 タイプ(val により表20です。

                    Table 20 — typeof Operator Results
    ==================================================================
    |        Type of val         |              Result               |
    ==================================================================
    | Undefined                  | "undefined"                       |
    |----------------------------------------------------------------|
    | Null                       | "object"                          |
    |----------------------------------------------------------------|
    | Boolean                    | "boolean"                         |
    |----------------------------------------------------------------|
    | Number                     | "number"                          |
    |----------------------------------------------------------------|
    | String                     | "string"                          |
    |----------------------------------------------------------------|
    | Object (native and does    | "object"                          |
    | not implement [[Call]])    |                                   |
    |----------------------------------------------------------------|
    | Object (native or host and | "function"                        |
    | does implement [[Call]])   |                                   |
    |----------------------------------------------------------------|
    | Object (host and does not  | Implementation-defined except may |
    | implement [[Call]])        | not be "undefined", "boolean",    |
    |                            | "number", or "string".            |
    ------------------------------------------------------------------
    

この行動基づいており、 IEEE標準の浮動小数点演算(IEEE754):

4.3.19数値

プリミティブ値に対応する倍精度の64ビットのバイナリー 形式IEEE754値

4.3.23NaN

数値であるIEEE754"非数"の値

8.5定番タイプ

数式のよう18437736874454810627(253−264+3) 価値観を表現する倍精度の64ビット形式IEEE754 値として指定されたIEEE標準のバイナリ浮動小数点 算術演算を除き、9007199254740990(253-2)異なる "非数"の価値IEEE規格表 ECMAScriptとして特別 NaN 値とします。(注の NaN 値 によって作られたプログラムの表現 NaN.)

のNaNが有効な浮動小数点値である( http://en.wikipedia.org/wiki/NaN の)

とのNaN === NaNに偽である、彼らは必ずしもないだから同じ非番号

NaN != NaN彼らは非数SAME必要はありませんので。したがって、それは多くの意味になります... また、なぜ浮動小数点数は同じではありません0.00と-0.00の両方を持っています。丸めは、彼らが実際にゼロではないことを行うことができます。

言語に依存します。

typeof演算については、。そして、ほとんどの言語は、彼らはそれを分類する方法に応じて、二重または数は、NaNがfloatであることを言うだろう...私は、これは未知のタイプまたはnullであると言うだろうがない言語を知ってます。

NaNない番号の略です。このようなゼロ除算などの無効な操作の結果を表す(常にではない通常の浮動小数点タイプが、)数値データ型の値である。

その名は、それが数、それは数値型で保持するために使用されるデータ型ではないと言うが。 (NaNが明確に示しているよう)だから、JavaScriptで、numberのデータ型を求めることalert(typeof(NaN))を返します。

Javascriptがそれはそれはその仕様により、他の方法では表現できない遭遇した何かを表現するためにはNaNを使用しています。それが数字ではないという意味ではありません。それはちょうど出会いを記述するための最も簡単な方法です。 NaNはそれまたはそれを参照するオブジェクトがジャバスクリプトによって他の方法で表現することができなかったことを意味します。すべての実用的な目的のために、それが「不明」です。 「不明」であること、それはそれが何であるかを伝えることはできませんまたそれ自体であっても。それは、それが割り当てられても、オブジェクトではありません。それはそれだけではない何かを伝えることができ、そしてないらしまたは無しかプログラミング言語で数学的に記述することができます。数学数字程度であるので、JavascriptをNaNのような無を表します。それはそれは数ではないという意味ではありません。それは我々が理にかなって他の方法でそれを読むことができないことを意味します。それも自分自身を等しくすることができない理由です。それがないからです。

より良い名前 NaN, 記述その意味をより正確に、満を紛らわしい外観という 数値例外.でもその例外オブジェクトを偽装しているプリミティブ型の言語でデザイン)は、同じではないとして扱うプリミティブに、falseの場合は自己と比較しました。エを中止します。るためのバッファーとしての言語"といいます。心"をお選びくださ 適切な例外オブジェクトプリミティブ数字, の混乱ます。

の悪名高い不平等の NaN 自両 ===== が表れにく設計強この例外オブジェクトとプリミティブタイプです。この基本原則 プリミティブ固有の価値.の場合 NaN が好とみられるようになるかもしれな例外(ができる異なる種類であることを検証することがない"販売"としてのプリミティブ.であれば欲しかったプリミティブは、原則となります。どで破損しておりますので、JavaScript、できない決定は混乱への不必要な認知的負荷のなんらかの変化その他=色々残す"という扱いになります。し、簡単に固定するだけでは間:

  • かどうかは NaN 特別な例外を含むオブジェクトについての情報がどのような例外が生じて、投げる情報としてこのような活動がどのように実施し、くデバッグコード
  • もしくは NaN 企業のプリミティブ型 number (ときに紛らわしい外観の"数値")の場合すべきと同等自体を含めることはできませんその他の情報後者は明確に劣ります。

に考えられる点を強 NaNnumber タイプにできることを投げる時代に突入したと言われてい任意の数値表現です。し、その脆性の選択の結果の数値表現を含む NaN こちらの NaN, 等有害なプログラム予想外の結果など NaN < 0 を評価する false, (帰国 boolean の代わりに常にあります。

とても"もののあり方"も私たちを防ぐられることを明確に区別して、当社はコードの予測可能でeasierly debuggable.実際には、それをその例外として例外をスローしました。るが、残念ながら、よりコードが期待が緩和されるツールなど稿のFlowtype.

そして、汚 静かな対雑音に赤信号 NaN 区分.いつかの例外の扱いは例外を、何らかの例外をスローしました。

同様に、 Infinity+Infinity の構成要素 数値タイプ に発生する 拡張現実のライン なりません。数学的には、で表すことができる配列の実数の集積を + または -Infinity.

このはNaNはJSでのNumberオブジェクトのプロパティですので、それはそれは数であるとは何の関係もない、単純である。

NANを考えるための最善の方法は、その に番号知られていないということです。ザッツなぜNAN!= NAN各NAN値は、いくつかのユニークな未知の番号を表しているため。浮動小数点数の値の限られた範囲を有するためのNaNが必要です。丸めいくつかのケースでは、下位ビットは、1.0 / 11 * 11!= 1.0のようなナンセンスと思われるものにそのリードを失っているところに発生します。実際に大きい大きな値は無限大に完璧な例であるとのNaNである。

我々は唯一の10本の指に10以上の値は、我々は10の値より、この大きいの真の価値を失っているので、このような値はNaNをでなければならない意味し、不可能な表示するいかなる試みを持って考えます。同じ値がフロートに保持することができるものの限界を超える場合、浮動小数点値の真である。

NaNの数値データ型ですので。

NaNは、ビューのタイプポイントの数であるが、1、2又は329131.名など通常数ないの「NOT A数」の値であると表現するという事実を指し特別とIEEE形式仕様ドメイン、ないジャバスクリプト言語ドメインについてです。

のjQueryを使用している場合、私は種類をチェックの上にisNumericを好むます:

console.log($.isNumeric(NaN));  // returns false
console.log($.type(NaN));       // returns number

http://api.jquery.com/jQuery.isNumeric/する

はJavascriptが、標準的な64ビットの倍精度浮動小数点数である唯一の数値データ・タイプを有します。すべては、二重です。 NaNは、二重の特別な値であるが、それにもかかわらず、二重です。

結果はの常にの「数」であるので

はすべてのことparseIntがない、数値データ型に「キャスト」にあなたの文字列です。元の文字列が解析可能でなかった場合にのみ、その値はNaNになります。

のNaNは、まだ数値型であるが、それは有効な数値を表すことができませんでした値を表します。

私たちは、NaNの特殊なケースのオブジェクトであることを主張することができます。この場合は、NaNのオブジェクトは数学的な意味がない数を表します。 INFINITEのような数学でというように他のいくつかの特殊なケースのオブジェクトがあります。

あなたはまだそれにいくつかの計算を行うことができますが、それは奇妙な行動をもたらすであろう。

ここで

詳細情報: http://www.concentric.net/~ttwang/ハイテク/ javafloat.htmする(Javaベースの、ないジャバスクリプト)

あなたはJavascriptを愛するようになってきました。これは、いくつかの興味深い少し癖があります。

http://wtfjs.com/page/13する

あなたがそれらを論理的に動作するように停止した場合、

これらの癖のほとんどを説明することができ、またはあなたは数論について少し知っていれば、しかし、あなたがそれらについて知っていない場合はそれにもかかわらず、彼らはまだあなたをキャッチすることができます。

ちなみに、私は http://wtfjs.com/するの残りの部分を読むことをお勧めします - 多数ありますこの1より面白い癖が発見される!

あなたはそれがそう言うだろう番号があるかどうか尋ねるとき、

は値NaNは、したがって、本当にNumber.NaNです。あなたはますisNaN()の呼び出しを使用して、正しいことをしました。

については、NaNはまた、ゼロまたは負の数の平方根によって分割ように定義されていない番号に操作することによって戻すことができます。

私たちは、文字列を数値に変換している想像してみて

Number("string"); // returns NaN

私たちは数にデータ型を変更しますが、その値が数値ではありません!

これはPOSITIVE_INFINITY

としてNumber型の特殊な値であり、

なぜ?設計により、

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top