JavaScript数値変換

4527 ワード

JavaScript数値変換
JavaScript文字列変換デジタル方法は主に4つあります.強制型変換、変換関数、JS変数の弱タイプの特徴を利用して変換し、1元加算オペレータを利用して変換します.
強制タイプ変換-Number
強制型変換を使用すると、他のタイプのものであっても、特定の値にアクセスできます.
ECMAScriptで使用できる3つのタイプの強制変換は以下の通りです.
  • Boolean(value)——与えられた値をBoolean型
  • に変換する.
  • Number(value)——与えられた値を数値(整数または浮動小数点)に変換する
  • String(value)——与えられた値を文字列
  • に変換する.
    Number()関数の変換規則は以下の通りです.
  • デジタル値であれば、これは単純な着信であり、
  • に戻る.
  • Boolean値であれば、trueとfalseはそれぞれ1と0
  • に変換されます.
  • null値であれば、0
  • を返します.
  • undefinedであれば、NaN
  • に戻る.
  • 文字列であれば、以下の規則に従います.
  • 文字列に数字だけが含まれていると、10進数の値に変換されます.すなわち「1」は1になり、「010」は11になります.
  • 文字列に有効な浮動小数点フォーマットが含まれている場合、「1.1」のように対応する浮動小数点値に変換される(同様に、プリアンブルゼロも無視される)
  • 文字列に有効16進数の書式が含まれている場合、「0 xf」のように、10進数の整数値
  • に変換されます.
  • 文字列が空(任意の文字を含まない)である場合、それを0
  • に変換する.
  • 文字列に上記形式以外の文字が含まれている場合、NaN
  • に変換される.
  • オブジェクトであれば、オブジェクトのvalueOf()方法を呼び出し、前の規則に従って戻り値を変換する.変換の結果がNaNであれば、オブジェクトのtoString()メソッドを呼び出し、再び前の規則に従って文字列値
  • を変換する.
    var num1 = Number(56);  // 56
    var num2 = Number(4.5); // 4.5
    var num3 = Number(null);    // 0
    var num4 = Number(undefined);   // NaN
    var num5 = Number(true) // 1
    var num6 = Number("");  // 0
    var num7 = Number("00123"); // 123
    var num8 = Number("    ");  // NaN
    var num9 = Number(new Object());    // NaN
    
    変換関数
    JavaScriptはparseInt()parseFloat()の2つの変換関数を提供しています.前者は値を整数に変換し、後者は値を浮動小数点に変換します.これらの方法はStringタイプに対してのみ正しく動作することができます.この2つの関数は文字列を変換する時、主に数値モードに合うかどうかを見ます.他の種類に対してはNaN(Not a Number)を返します.parseInt()は、最初の非スペース記号が見つかるまで、文字列の前のスペースを無視します.最初の文字が数字または負の文字でない場合、parseInt()はNaNに戻り、つまりparseInt()は空の列を変換するとNaNに戻ります.parseIntで数字の文字が見つかったら、第二の文字を解析し続けます.解析が完了したことを知っています.または、すべての後続文字が発生したことを知っています.一方、parseInt()は、整数フォーマットを識別してもよく、文字列が「0 x」で始まり、後に数字またはabcdefと続くと、16進数変換として扱われる.
    var num1 = parseInt("2.5"); // 2
    var num2 = parseInt("0xA"); // 10(     )
    var num3 = parseInt("70");  // 70
    var num4 = parseInt("123    "); // 123
    var num5 = parseInt("") // NaN
    var num6 = parseInt(null);  // NaN
    var num7 = parseInt(undefined); // NaN
    
    parseInt()は、使用時に、文字列全体にプリアンブルが存在すると、解析の進数が異なり、ChromeおよびFireFoxでは、プリアンブルのゼロは無視されるが、IEの低バージョンブラウザでは、8進数のフラグと見なされることに留意されたい.たとえば:
    var num = parseInt("0123");
    
    IEの低バージョンブラウザでは83に戻るが、Chrome、FireFoxでは123に戻る.parseFloat()parseInt()の関数と同様であり、最初の文字から各文字を解析し始め、文字列の最後まで解析したり、無効な浮動小数点数字文字まで解析したりする.つまり、文字列の最初の小数点は有効ですが、2番目の小数点は無効です.parseFloat()parseInt()の第二の違いは、parseFloat()は、任意のブラウザにおいて、プリアンブルのゼロを無視することである.
    var num1 = parseFloat("2.5");   // 2.5
    var num2 = parseFloat("0xA");   // 10(     )
    var num3 = parseFloat("70");    // 70
    var num4 = parseFloat("3.1314e7");  // 31314000
    var num5 = parseFloat("123.5    "); // 123.5
    var num6 = parseFloat("")   // NaN
    var num7 = parseFloat(null);    // NaN
    var num8 = parseFloat(undefined);   // NaN
    
    追加:parseInt()parseFloat()の第3の違いとして、parseInt()の方法は、バイナリ、8進数、16進数、または他の任意の進数の文字列を整数に変換することもできる.基本はparseInt()方法の第二のパラメータによって指定されており、例は以下の通りである.
    var num1 = parseInt("10", 2);   // 2
    var num2 = parseInt("10", 8);   // 8
    var num3 = parseInt("10", 10);  // 10
    var num4 = parseInt("AF", 16);  // 175
    
    しかし、パースピードFloat()には進数変換の機能がありません.
    JavaScript変数による弱タイプ変換
    算術演算子の方式を利用して、文字列を数字に変換することもできます.たとえば:
    var str = '012.345 ';
    var x = str - 0;
    var y = str * 1;
    var m = str / 1;
    
    上記の例では、jsの弱タイプの特徴を利用して算術演算のみを行い、文字列から数字へのタイプ変換を実現しました.
    注意:足し算は使用できません.文字列に対して+はコネクタを表します.
    一元加算操作子を用いて変換する.
    一円プラスの操作子はプラス記号(+)で表しています.数値の前に置いて、数学書で言っているプラス記号と同じです.数値には何の影響もありません.例:
    var num = 25;
    num = +num; //    25
    
    しかし、非数値に1要素加算演算子を適用すると、この演算子はNumber()の変換関数のようにこの値を変換します.つまり、ブール値trueとfalseは1と0に変換され、文字列値は一定の特殊な規則に従って解析され、対象は最初にvalueOf()toString()の方法を呼び出してから変換される値である.例:
    var str1 = "01";
    var str2 = "1.1";
    var str3 = "z";
    var bool = true;
    var num = 1.1
    var obj = {
        valueOf : function(){
            return -1;
        }
    }
    
    str1 = +str1;   // 1
    str2 = +str2;   // 1.1
    str3 = +str3;   // NaN
    bool = +bool;   // 1
    num = +num; // 1.1
    obj = +obj; // -1
    
    転載は明記してください.尹小芃槈から転載します.