数値以外の値を数値に変換できる関数は 3 つあります: Number()、parseInt()、parseFloat()。最初の関数である変換関数 Number() は任意のデータ型に使用できますが、他の 2 つの関数は特に文字列を数値に変換するために使用されます。これら 3 つの関数は、同じ入力に対して異なる結果になります。
Number()関数の変換ルールは以下の通りです
ブール値の場合はtrue、falseはそれぞれ1、0に変換されます
数値の場合はそのまま渡されます。
null 値の場合は 0 が返されます。
未定義の場合は NaN が返されます。
文字列の場合は、次の規則に従います。
文字列に数値のみが含まれる場合は、10 進数値に変換します。レベル "1" は 1 になり、"123" は 123 になり、"011" は 11 になります (前の 0 は無視されます)
文字列に "1.1" などの有効な浮動小数点形式のみが含まれている場合は、変換されます対応する浮動小数点値に変換されます (同様に、先頭のゼロは無視されます)
文字列に「0xf」などの有効な 16 進形式のみが含まれている場合、同じサイズの 10 進整数値に変換されます
文字列が空(文字が含まれていない)の場合は、0に変換します
文字列に上記形式以外の文字が含まれている場合は、NaNに変換します
オブジェクトの場合は、オブジェクトのvalueOf()メソッドを呼び出し、返された値を変換します前のルールに従った値。変換の結果が NaN の場合、オブジェクトの toString() を呼び出してさまざまなデータ型を数値に変換するのは確かに少し複雑です。具体的な例をいくつか示します:
var num1 = Number("Hello world!"); //NaN var num2 = Number(""); //0 var num3 = Number("000011"); //11 var num4 = Number("true"); //1
まず、文字列「Hello world!」は、意味のある数値が含まれていないため、NaN に変換されます。空の文字列は 0 に変換されます。文字列「000011」は、先頭のゼロが無視されるため、11 に変換されます。最後に、真の値は 1 に変換されます。
Number() 関数は文字列を変換する場合には複雑で不合理であるため、整数を処理する場合には parseInt() 関数がより一般的に使用されます。 parseInt() 関数が文字列を変換する場合、文字列が数値パターンに準拠しているかどうかに大きく依存します。最初の非スペース文字が見つかるまで、文字列内の先頭のスペースは無視されます。最初の文字が数字または負符号でない場合、parseInt() は NaN を返します。つまり、parseInt() を使用して空の文字列を変換すると、NaN が返されます (Number() は空の文字列に対して 0 を返します)。最初の文字が数字の場合、parseInt() は後続の文字がすべて解析されるか、数字以外の文字が検出されるまで 2 番目の文字の解析を続けます。たとえば、「blue」は完全に無視されるため、「123blue」は 1234 に変換されます。同様に、「22.5」は小数点が有効な数字ではないため、22 に変換されます。
文字列の最初の文字が数字の場合、parseInt() はさまざまな整数形式 (つまり、10 進数、8 進数、16 進数) も認識できます。つまり、文字列が「0x」で始まり、その後に数字が続く場合は 16 進整数として扱われ、文字列が「0」で始まり、その後に数字が続く場合は 8 進数として扱われます。 。
parseInt() 関数の変換規則をよりよく理解するために、以下にいくつかの例を示します:
var num1 = parseInt("1234blue"); //1234 var num2 = parseInt(""); //NaN var num3 = parseInt("0xA") //10(十六进制) var num4 = parseInt("22.5"); //22 var num5 = parseInt("070"); //56(八进制) var num6 = parseInt("70"); //(70)十进制 var num7 = parseInt("0xF") //15(十六进制)
これらの例を理解するとき、最も重要なことは、parseInt() が "070" と " をどのように解析するかに注意を払うことです。 70インチ さまざまな方法。このとき、「070」の先頭のゼロは、これが 8 進数 (10 進数ではない) 形式の文字列であることを示しているため、結果は 56 になります (この結果は Number() 関数の呼び出しとは異なることに注意してください)。また、「70」は先頭にゼロがないため、70 に変換されます。 parseInt() 関数の使用時に発生する可能性のある上記の混乱を避けるために、ECMAScript はこの関数の 2 番目のパラメータ、つまり変換に使用されるベース (つまりベース) も提供します。
解析する値が 16 進形式の文字列であることを知りたい場合は、2 番目のパラメーターとして基数 16 を指定すると、正しい結果が得られます。例:
var num = parseInt("0xAF", 16) ); //175
実際には、2 番目のパラメータとして 16 が指定されている場合、以下に示すように、文字列の前に「0x」がなくてもかまいません:
var num1 = parseInt("AF", 16); //175 var num2 = parseInt("AF"); //NaN
この例の最初の変換は成功し、2 番目の変換は失敗しました。違いは、最初の変換では基数を渡し、parseInt() に文字列を 16 進数形式で解析するように明示的に指示するのに対し、2 番目の変換では最初の文字が数値ではないことが検出されるため、自動的に終了することです。
基数の指定は、変換の出力結果に影響します。例:
var num1 = parseInt("10", 2); //2 var num2 = parseInt("10", 8); //8 var num3 = parseInt("10", 10); //10 var num4 = parseInt("10", 16); //16
ベースを指定しないということは、parseInt() に入力文字列の解析方法を決定させることを意味するため、誤った解析を避けるために、どのような状況であっても、特に次のような状況ではベースを明示的に指定することをお勧めします。 8 進数:
var num1 = parseInt("010"); //8 var num2 = parseInt("010", 8); //8 var num2 = parseInt("010", 10); //10
在这个例子中,“010”会因为第二个参数不同而被转换成不同的值。第一行的转换很直观,即让parseInt()决定如何转换。由于第一个字符是 “0”而后面也是数字字符,因而parseInt()假设它是一个八进制数。实际上,parseInt()的这个默认行为域第二行转换中明确了基数行为是 一致的。第三行传入基数10,因此parseInt()就会忽略字符串中的前导零,而只解析其余的数字符。
多数情况下,我们要解析的都是十进制数值,因此始终将10作为第二个参数是非常必要的。
与parseInt()函数类似,parseFloat()也是从第一个字符(位置0)开始解析每个字符。而且也是一直解析到字符串末尾,或者解析 到遇见一个无效的浮点数字字符为止。也就是说,字符串中的第一个小数点是有效的,而第二个小数点是无效的,因此它后面的字符串将被忽略。举例来 说,“22.34.5”将会被转换为22.34。
除了第一个小数点有效之外,parseFloat()与parseInt()的第二个区别在于它始终都会忽略前导零。parseFloat()可以 识别前面讨论过的所有浮点数值格式,也包括十进制整数格式。但十六进制格式的字符串始终会被转换为0。由于parseFloat()只解析十进制值,因此 它没有用第二个参数指定基数的用法。最后还要注意一点:如果字符串包含的是一个可解析为整数的数(没有小数点,或者小数点后面都是 零),parseFloat()会返回整数。以下是使用parseFloat()转换数值的几个典型示例:
var num1 = parseFloat("1234blue"); //1234 var num1 = parseFloat("0xA"); //0 var num1 = parseFloat("22.5"); //22.5 var num1 = parseFloat("22.34.5"); //22.34 var num1 = parseFloat("0908.5"); //908.5 var num1 = parseFloat("3.125e7"); //31250000
以上がNumber()、parseInt()、および parseFloat() の数値変換の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。