2017-02-16 5 views
4

は考える:parseIntがJavascriptで配列を正しくテストできないのはなぜですか?

var obj={0:21,1:22} 

var arr=[21,22] 

をなぜparseInt(obj)リターンNaNが、parseInt(arr)戻り21

私にはint、ハッシュタイプobjectまたは平文arrayを渡すかのいずれかの関数がありました。私はparseIntobjectarrayの両方に対してNaNを返すことを期待していたので、引数チェックが簡単になりました。何がありますか?

+1

なぜあなたは 'parseInt()'をまったく使用していますか?私が使っている唯一の2つのものは、(a)非ベース10入力、(b)入力文字列をCSSの "10px"のような既知のフォーマットで解析して、ちょうど '10'部分を必要とするものです。単項+演算子 '+ [21,23]'のように 'Number([21,22])'が 'NaN'を返すと信じています。 – nnnnnn

+0

@nnnnnn - なぜですか? 'if isNaN(parseInt(argument1))... 'です。早くて簡単。害は何ですか?私はフリップではない。私は本当に興味があります。 – user1167442

+0

'argument1'が文字列' '123abc" 'であれば、それは有効な数字ではありませんが、' 'parseInt(" 123abc ")'は '123'を返します。実際に*必要な結果であれば、 'parseInt()'を使用してください。しかし、私の経験上、それは意味をなさないことは非常にまれです。関数の引数がすでに*数値*(オブジェクトや配列ではない)であることをテストしたい場合は、 'typeof'演算子を使用できます。 – nnnnnn

答えて

8

これは、parseIntが整数に解析する前に最初の引数を文字列に変換しようとするためです。 String(obj)"[object Object]"を返し、解析できませんが、String([21,23])"21,23"を返します。parseIntは解析できない文字に達するまで解析します。

the parseInt specを参照してください:

inputStringはなりましょうか? ToString(string)。

(文字列への入力を強制)

Sに基数-R桁でないコード単位が含まれている場合、Zを、そのようなコード単位の前にあるすべてのコード単位からなるSの部分文字列とします。そうでない場合、Zは

S.であるとする( - >"21"非数字文字で始まる文字列の任意の部分を削除し、そう"21,23")。

+0

これは正しいです。配列の文字列表現は、配列要素を結合した結果です。 – undefined

+0

"これは、parseIntが引数を文字列に変換しようとしているからです。"そのドキュメンテーションはそうでないと推測します:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/parseInt – Mamun

+0

それです。プログラミング言語内の微妙なニュアンスを驚かせてください – user1167442

関連する問題