2017-03-03 17 views
0

なぜparseInt("-1000-500-75-33")返信-1000文字列番号混乱

それはこれらの数字の合計を返すべきではありません:-1608

がどのように私は、文字列"-1000-500-75-33"は、これらの数字の和として返すために得ることができますか?

+0

eval( " - 1000-500-75-33")toString() '?toString()'?toString() '? – Hodrobond

+1

@Hodbondが働いた、ありがとう!それを答えとして投稿すれば、私はあなたに小道具をあげる –

答えて

3

parseInt文字列の先頭から番号を取得しようとします。

-は数字を始める有効な文字であるため、無効なものが見つかるまで文字列を解析します。 2番目の-は無効です。整数の中に-を含めることができます。数字は数字のみです。それでそこで止まり、数字が「終了」とみなされます。


さて、あなたはプロセスに表現をしたい場合、あなたはそのようevalを使用することができます:予想通り

eval("-1000-500-75-33") 

をこれが-1608を返します。

0

文字列内にあるため、ParseIntは文字列全体を解析せず、最初から適用可能な数値を見つけます。&を返します。文字列の先頭が解析できない場合、それはあなたがそれをコンソールに入力したコマンドであるかのように文字列を与えられた評価される、あなたがやりたいeval機能を使用する必要がNaN

parseInt("-1000NOT_NUMBER") = -1000 
parseInt("test-1000`) = NaN 

を返します。

eval("-1000-500-75-33") = -1608 
0
console.log(eval("-1000-500-75-33").toString()); 

そして、型キャストについてをお試しください:明らかに "1000負" である、-1000を解析した後、それはすぐにそれが検出としてキャストエスケープします数字の間に共通の記号&文字列。したがって、parseInt"-1000-500-75-33""-1000NotConvertableString"と表示されているので、タイプキャストの結果として-1000が返されます。

1

parseIntは計算を実行せず、文字列を整数に変換しようとします。それ以降のダッシュは有効な数字ではないため、-1000を返します。

var numString = "-1000-500-75-33"; 
numString.split('-').map(e => Number(e)).reduce((a, b) => a - b);