2016-10-31 5 views
2

は、私はこのようなコードに遭遇しました:parseFloatはエラーをスローしますか?私が働いているコードベースで

try { 
    price = parseFloat(price); 
} catch (err) { 
    console.log(err); 
} 

私はpriceは数に変えることができないほとんどの場合、それは単に代わりNaNの値を取得しますことを知っています。私の質問は、試行錯誤の構築を必要とするエラーが発生するケースはありますか?

+0

「価格」に依存します。'var price = {valueOf(){新しいエラーを投げてください。 }} ' – Bergi

答えて

4

エラーをスローして試行錯誤が必要な場合がありますか?

はい。参照エラー(priceが宣言されていなかったため)またはparseFloatが関数などではないもので上書きされた場合は、parseFloatも例外をスローする可能性があります。

ただし、文字列を渡すとエラーは発生しません。引数を文字列に変換しようとしたときに例外が発生した場合にのみスローされます。例は:

  • シンボルを通過

    • は、[Symbol.toPrimitive]ことなく、これらのいずれかの方法がいずれも、これらの方法のオブジェクトを渡す
    • をスローオブジェクトを渡す.valueOfまたは.toString方法
    • のオブジェクトを渡しプリミティブを返す
  • 0

    parseFloat()自体はエラーを返すことはなく、返すことはありません。しかし、変数priceは、コンテキスト内で宣言されていない場合は、のようなエラーが発生します。

    Uncaught ReferenceError: price is not defined 
    

    それが周りにtry/catchブロックがある理由を説明しています。

    質問に答える:はい以前のjsの実行/コンテキスト(adblockersなどのため)を信頼できない場合は必要ありませんが、エラーをスローする関数parseFloat()はありません通訳。

    +2

    このエラーは' parseFloat'とは何の関係もありませんが、 'parseFloat'に達する前にスローされます(宣言されていない変数の読み込みによって)。 – Quentin

    +0

    @quentin正しいので、私はそれを明確にした。しかし、実際の質問だけでなく、実際の質問を読んだ場合、OPは言います。*私の質問は、試行錯誤の構築を必要とするエラーが発生するケースがありますか? parseFloat()はエラーを返すことはできません "という質問が文脈の中で誤解を招きます。だから、あなたの下垂体を収縮させてください、これはOPの質問に対する答えです。 –

    0

    短い答え:MDN

    所与の文字列から解析された浮動小数点数から号

    。最初の文字が数値に変換できない場合は、NaNはエラーをスローするには、no例はありません

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat

    +0

    変数が存在しない場合でもエラーメッセージが表示され、エラーが発生することがあります。 OPは、 'parseFloat()'を使うときにtry/catchが必要な場合があるかどうかを明示的に尋ねます。 –

    0

    が返されます。

    常に返信NaN文字を数字に変換できない場合。

    関連する問題