1. ホーム
  2. javascript

[解決済み] parseIntとunary plus、いつどちらを使うか?

2022-04-20 23:05:51

質問

この行の違いは何ですか。

var a = parseInt("1", 10); // a === 1

そしてこの行

var a = +"1"; // a === 1

これは jsperf test は、node.js用と仮定して、現在のクロームバージョンでは単項演算子がずっと高速であることを示しています!?

数字ではない文字列を変換しようとすると、両方とも NaN :

var b = parseInt("test" 10); // b === NaN
var b = +"test"; // b === NaN

では、どのような場合に parseInt を単項のプラスに置き換えたものです(特にnode.jsでは)。

編集 そして、ダブルチルド演算子と何が違うのでしょうか? ~~ ?

解決方法は?

さて、私が知っている相違点をいくつか挙げてみましょう。

  • 空の文字列 "" と評価されます。 0 一方 parseInt と評価されます。 NaN . IMO では、空白文字列は NaN .

      +'' === 0;              //true
      isNaN(parseInt('',10)); //true
    
    
  • 単項演算子 + のように動作します。 parseFloat は小数も扱えるからです。

    parseInt 一方、小数点以下のピリオドのような非数値文字を見つけると、パースを停止します。 . .

      +'2.3' === 2.3;           //true
      parseInt('2.3',10) === 2; //true
    
    
  • parseIntparseFloat の文字列をパースして構築します。 左から右へ . もし無効な文字があれば、解析されたものを数字として返し、さらに NaN というのは、数字として解析されたものがない場合です。

    単項の + を返します。 NaN は、文字列全体が数値に変換できない場合です。

      parseInt('2a',10) === 2; //true
      parseFloat('2a') === 2;  //true
      isNaN(+'2a');            //true
    
    
  • のコメントにあるように @Alex K. , parseIntparseFloat は文字単位でパースします。つまり、16進数や指数表記は xe は非数値成分として扱われます (少なくとも base10 では)。

    単項の + はちゃんと変換してくれますが。

      parseInt('2e3',10) === 2;  //true. This is supposed to be 2000
      +'2e3' === 2000;           //true. This one's correct.
    
      parseInt("0xf", 10) === 0; //true. This is supposed to be 15
      +'0xf' === 15;             //true. This one's correct.