質問
を出てすぐの好奇心をかきたてた。
ていることに対して非常のアプローチを行うことが合理的 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になります。 x
がNaN
であれば、x == x
は常にfalseとなります。それはあなたに(静かに)簡単にNaN
を検出する方法を与えてます。
は、ECMAScript(JavaScript)を標準を指定する Numbers
は IEEE754 山車は、 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:
設定の全ての可能な数値を含む特別な"非数" (NaN)値が正の無限大の場合、負の無限大に近づくように
なので
typeof
を返すめの生産 UnaryExpression :
typeof
UnaryExpression は 評価としており- ましょう val の結果を評価する UnaryExpression.
- の場合 タイプ(val) 参考, その
- の場合 IsUnresolvableReference(val) true, 戻
"undefined"
. - ましょう val すると GetValue(val).
- の場合 IsUnresolvableReference(val) true, 戻
- 文字列を返しが決定 タイプ(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):
プリミティブ値に対応する倍精度の64ビットのバイナリー 形式IEEE754値
数値であるIEEE754"非数"の値
数式のよう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
(ときに紛らわしい外観の"数値")の場合すべきと同等自体を含めることはできませんその他の情報後者は明確に劣ります。
に考えられる点を強 NaN
入 number
タイプにできることを投げる時代に突入したと言われてい任意の数値表現です。し、その脆性の選択の結果の数値表現を含む 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
はJavascriptが、標準的な64ビットの倍精度浮動小数点数である唯一の数値データ・タイプを有します。すべては、二重です。 NaNは、二重の特別な値であるが、それにもかかわらず、二重です。
結果はの常にの「数」であるのではすべてのことparseInt
がない、数値データ型に「キャスト」にあなたの文字列です。元の文字列が解析可能でなかった場合にのみ、その値はNaNになります。
のNaNは、まだ数値型であるが、それは有効な数値を表すことができませんでした値を表します。
私たちは、NaNの特殊なケースのオブジェクトであることを主張することができます。この場合は、NaNのオブジェクトは数学的な意味がない数を表します。 INFINITEのような数学でというように他のいくつかの特殊なケースのオブジェクトがあります。
あなたはまだそれにいくつかの計算を行うことができますが、それは奇妙な行動をもたらすであろう。
ここで詳細情報: http://www.concentric.net/~ttwang/ハイテク/ javafloat.htmする(Javaベースの、ないジャバスクリプト)
あなたはJavascriptを愛するようになってきました。これは、いくつかの興味深い少し癖があります。
あなたがそれらを論理的に動作するように停止した場合、これらの癖のほとんどを説明することができ、またはあなたは数論について少し知っていれば、しかし、あなたがそれらについて知っていない場合はそれにもかかわらず、彼らはまだあなたをキャッチすることができます。
ちなみに、私は http://wtfjs.com/するの残りの部分を読むことをお勧めします - 多数ありますこの1より面白い癖が発見される!
は値NaNは、したがって、本当にNumber.NaNです。あなたはますisNaN()の呼び出しを使用して、正しいことをしました。
については、NaNはまた、ゼロまたは負の数の平方根によって分割ように定義されていない番号に操作することによって戻すことができます。
例
私たちは、文字列を数値に変換している想像してみて
Number("string"); // returns NaN
私たちは数にデータ型を変更しますが、その値が数値ではありません!
これはPOSITIVE_INFINITY
としてNumber型の特殊な値であり、なぜ?設計により、