ECMAScriptのNumberタイプを理解する

7061 ワード

どのような点からナンバーバータイプを身につけますか?
まず、変数にはタイプがなく、タイプがあるのは変数の値です.変数は、各タイプの値を格納するために使用されます.
一.Numberタイプの基本概念
Numberタイプの値は2つあります.整数値と浮動小数点値(浮動小数点値はいくつかの言語でもダブル精度の数値doube-precisionとして知られています.)この2つの値はいずれもIEEE 754フォーマットで表されている.
二.Numberのタイプの数値の字面量のフォーマットはどれらがありますか?
1.十進数の整数.
最も基本的な数値は文字数の書式です.
var intNum = 55;//     
 
2.八進法です
八進文字の面の二つの構成部分:第一位はゼロ(0)でなければなりません.そして八進数字の系列(0~7)です.
八進法で注意します.文字の面の値が範囲を超えていると、前のゼロは無視され、後の数値は十進数として解析されます.
var octalNum1 = 070;//    070,    56

var octalNum2 = 079;//   “9”    ,     ,   79

var octalNum3 = 08;//      ,   8
 
3.八進法の字面量は厳格なモードで無効となり、サポートされているJavaScriptエンジンがエラーを出すことになります.
4.16進数
十六進字面の前の二桁は必ず0 xで、後の任意の十六進数(0~9及びA~F)です.この中で、アルファベットA~Fは大文字でもいいし、小文字でもいいです.
var hexNum1 = 0xA;//      10


var hexNum2 = 0x1f;//      31
 
5.八進、十六進と十進の関係.
算術計算をするとき、8進数と16進数で表されるすべての数値は最終的に10進数に変換されます.
0xA + 070;//66
 
三.浮動小数点数
1.浮動小数点の数値は何ですか?
浮動小数点とは、この数値に小数点を含まなければならず、小数点以下には少なくとも1桁の数字が必要である.二大必須の構成部分.
var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1;  //  ,     
 
2.浮動小数点の数値と整数値の関係は何ですか?
これらの間には変換関係があり、浮動小数点の数値は整数値に変換される.
  • 浮動小数点値を保存するために必要なメモリ空間は整数値の2倍です.
  • ECMAScriptは、タイミングを逃さず浮動小数点値を整数値に変換します.
  • 変換条件は2つあります.小数点以下は数字と同じではなく、浮動小数点自体は1.0のような整数を表します.
  • //             
    var floatNum4 = 1.;  //   1,       ,“1.”          ,          。
    var floatNum5 = 10.0;  //   10
     
    3.浮動小数点の数値と極めて大きく、極小数値との間には何の関係がありますか?
    それらの関係は科学的計数法の表現にある.
    極大値の表示:
    var floatNum = 3.125e7; //  31250000,  ,3.125  ,10 7  。  ,                。
     
    極小値の表示:
    var a = 0.00000000000000003;
    console.log(a);//3e-17
     
    0.00000 0003は3 e-17で表現できます.
    デフォルトでは、ECMAScriptは、それらの小数点の後ろにゼロ以上の浮動小数点がある数値をe表記法で表した数値に変換します.ブラウザコンソールで検証できます.
    4.IEEE 754浮動小数点数の共通病気:
    0.1 + 0.2;  //   0.30000000000000004
    
    //           !
    if (a + b == 0.3){
        alert("You got 0.3.");
    }
    
    //  
    0.05 + 0.25;  //0.3    
    0.15 + 0.15;  //0.3    
     
    通病にはどんな解決方法がありますか?
    2つの数値差分値の絶対値とMachine Epsionという数値を比較して比較した.この値は通常2^-52(2.22044604925033 e-16)です.
    ES 6では、Number.EPSILONはこの数を表しています.コードを添付:
    //     
    if (!Number.EPSILON) {
        Number.EPSILON = Math.pow(2,-52);
    }
    
    function numbersCloseEnoughToEqual(n1,n2) {
        return Math.abs( n1 - n2 ) < Number.EPSILON;
    }
    
    var a = 0.1 + 0.2;
    var b = 0.3;
    
    numbersCloseEnoughToEqual( a, b );                  // true
    numbersCloseEnoughToEqual( 0.0000001, 0.0000002 );  // false
     
    四.数値範囲
    1.数値範囲
    最小値:Number.MIN_VALE.ほとんどのブラウザは5 e-324です.
    最大値:Number.MAX_VALE.ほとんどのブラウザは1.7976931348623157 e+308です.
    2.範囲外の数値はどう表しますか?
    特殊なInfinity値で表します.
    正の数が範囲を超えたら、数値は自動的にInfinityに変換されます.InfinityはNumber.NEGATIVE_に預けられています.INFINITYでは
    負の数が範囲を超えたら、数値は自動的に-Infinity(負の無限)に変換されます.InfinityはNumber.POSITIVE_に保存されています.INFINITYでは
    Infinityは数値ですが、数値計算には参加できません.
    typeof Infinity;  //"number"
     
    3.一つの数が有効範囲内かどうかをどう判断しますか?
    isfinite()の方法を使います.
    var result = Number.MAX_VALUE + Number.MAX_VALUE;
    
    alert(isFinite(result));//false
     
    五.NaN
    1.NaNの基本概念
    NaN、すなわち非数値(Not a Number)は特殊な数値であり、この数値は本来返すべき数値の操作数が数値に戻らない場合を表しています.
    2.NaNの二つの異常な特徴は何ですか?
  • NaNに関する任意の動作(例えばNaN/10)はNaNに戻り、この特徴は、マルチステップ計算において問題を引き起こす可能性がある.
  • の次に、NaNはいかなる値とも等しくなくて、NaN自身を含みます.
  • alert(NaN == NaN); //false
     
    3.isNaN()の使い方
    このパラメータが「数値ではない」かどうかを判断します.
    alert(isNaN(NaN));  //true
    
    alert(isNaN(10)); //false
    
    alert(isNaN("10"));  //false "10"    10
    
    alert(isNaN("blue")); //true
    
    alert(isNaN(true));  //false, true    1
     
    六.数値変換
    数値変換には3つの関数が使用されます.Number()、パーrseInt()とパーrseFloat().
    1.Number()の変換ルール
  • Boolean:true->1;false->0
  • 数字、簡単に伝わってきます.
  • .
  • null->0
  • undefined->NaN
  • Stringタイプの値:
  • 「1」->1
  • 「011」->11/前の0は無視されます.
  • 「1.1」->1.1
  • 文字列は16進数を含み、10進数に変換されます.Number(「0 x 1 f」)//31
  • 「-」0は空から0
  • に変換される.
  • 以上のフォーマットを除いて、残りはNaN
  • に変換されます.
  • Objectがオブジェクトであれば、オブジェクトのvalueOf()方法を呼び出し、前の規則に従って戻り値を変換する.変換の結果がNaNであれば、オブジェクトのtoString()メソッドを呼び出し、再び前の規則に従って文字列値を変換する.
  • まとめ:Number()関数は文字列を変換する時複雑で合理的ではないので、整数を処理する時によく使われるのはパー秒Int()関数です.
    2.parseInt()の変換ルール
  • 最初の文字が数字または負の文字でない場合、パー秒Int()はNaN
  • に戻ります.
    parseInt("dd12"); //NaN
    
    parseInt("");   //NaN
    
    Number("");  // 0
     
  • もし最初の文字が数字文字であれば、パー秒Int()は後続のすべての文字を解析し終わるまで、または非数値文字に出会うまで第二の文字を解析し続けます.
  • parseInt("1234ddd");  //1234
    
    parseInt("33.3");  //33 "."         。
     
  • parseInt 8進数はES 3とES 5で違いがあります.
    //ECMAScript 3   56(   ),ECMAScript 5   0(   )
    var num = parseInt("070");
     
  • 上記の困惑を解消するには、基数
  • を追加する必要がある.
    var num = parseInt("0xAF", 16); // 175
     
  • parseInt変換16進数に注意する必要があります.16を第2のパラメータとして指定した場合、文字列は前の「0 x」
  • を持たなくてもいいです.
    var num1 = parseInt("AF", 16);  //175
    
    var num2 = parseInt("AF");  //NaN
     
  • の最適な実践:多くの場合、私たちが解析したいのは10進数の数値です.したがって、常に10を第2のパラメータとして必要です.
  • 3.parseFloat()の使い方
  • 変換ルール:
  • パーrse Float()も最初の文字(位置0)から各文字を解析します.また、文字列の末尾まで解析したり、無効な浮動小数点の文字に出会うまで解析します.
    parseFloat("22.3.2");  // 22.3
     
  • parseFloatとParseIntの違いparseFloat()は、10進数の値だけを解析するので、2番目のパラメータで基数の使用法を指定していません.16進数の書式の文字列は常に0に変換されます.
  • //1234 (  )
    var num1 = parseFloat("1234blue");
    //0
    var num2 = parseFloat("0xA");
    //22.5
    var num3 = parseFloat("22.5");
    //22.34
    var num4 = parseFloat("22.34.5");
    //908.5
    var num5 = parseFloat("0908.5");
    //31250000
    var num6 = parseFloat("3.125e7");