javascript - 配列 - parseint 読み方




Number(...)とparseFloat(...)の違いは何ですか? (4)

JavaScriptのparseInt(string)とNumber(string)の違いは以前に尋ねられました。

しかし、答えは基本的にradix"123htg"ような文字列を123 "123htg"するparseIntの能力に焦点を当てました。

私がここで尋ねるのは、 Number(...)parseFloat(...)のリターンの間に、基数をまったく持たない実際の数値ストリングを渡すときに大きな違いがあるかどうかです。


@James Allardicは既に答えたように、内部の仕組みはそれほど変わっていません。 しかし、違いがあります。 parseFloatを使用すると、英数字で始まる1つ以上の数字で始まる(トリムされた)文字列は、Numberに変換され、Numberは成功しません。 次のように:

parseFloat('3.23abc'); //=> 3.23
Number('3.23abc'); //=> NaN

どちらの変換でも、入力文字列は次のようにトリミングされます。

parseFloat('  3.23abc '); //=> 3.23
Number('   3.23 '); //=> 3.23

newを使用して数値用のラッパーオブジェクトを作成しない場合、 Numberは単に文字列から型への型変換を行うことになります。

一方、 'parseFloat'は、あなたが言及したように、数字、小数点、または+ / - で始まる任意の文字列から浮動小数点数を解析することができます

したがって、数値のみを含む文字列を扱う場合、 Number(x)parseFloat(x)は同じ値になります


まだ別の答えを投稿してもらえませんでしたが、私はちょうどGoogleの検索でここに来て、私が望むすべての詳細を見つけられませんでした。 Node.jsで次のコードを実行する:

var vals = ["1", "1.1", "0", "1.1abc", "", " ", null];
for(var i = 0; i < vals.length; i++){
  var ifTest = false;
  if(vals[i])
  {
    ifTest = true;
  }
  console.log("val=" + vals[i] + ", Number()=" + Number(vals[i])+ ", parseFloat()=" + parseFloat(vals[i]) + ", if()=" + ifTest);
}

次の出力が得られます。

val=1, Number()=1, parseFloat()=1, if()=true
val=1.1, Number()=1.1, parseFloat()=1.1, if()=true
val=0, Number()=0, parseFloat()=0, if()=true
val=1.1abc, Number()=NaN, parseFloat()=1.1, if()=true
val=, Number()=0, parseFloat()=NaN, if()=false
val= , Number()=0, parseFloat()=NaN, if()=true
val=null, Number()=0, parseFloat()=NaN, if()=false

いくつかの注目すべきテイクアウェイ:

  1. もしnumberに変換しようとする前にif(val)で保護すると、parseFloat()は空白の場合を除いて数値を返します。
  2. Numberは、空白以外の数値以外の文字を除くすべての場合に数値を返します。

私が不足しているかもしれないテストケースを自由に追加してください。


両方とも、内部ToNumber(string)関数が呼び出されます。

ES5のセクション15.7.1から(関数として呼び出されるNumberコンストラクタ):

Numberがコンストラクタではなく関数として呼び出されると、 Number型変換が実行されます。

値が指定されている場合はToNumber(value)によって計算されたNumber値(Numberオブジェクトではない)を返し、そうでない場合は+0返します。

ES5セクション15.1.2.3から(parseFloat(string)):

... trimmedString接頭辞のどちらもtrimmedStringの構文を満たしていない場合(9.3.1参照)...

そしてToNumber(string)は "ToNumber(String型に適用されたToNumber)"というタイトルのセクションです。これはToNumber(value)ときに最初の引用が参照しているものToNumber(value)

更新 (コメントを参照)

new演算子でNumberコンストラクタを呼び出すと、数値リテラルではなくNumberオブジェクトのインスタンスが取得されます。 例えば:

typeof new Number(10); //object
typeof Number(10); //number

これは15.7.2項 (Number Constructor)で定義されています

Numbernew式の一部として呼び出されるとき、それはコンストラクタです:新しく作成されたオブジェクトを初期化します。





string-conversion