2016-05-18 6 views
2

これは私にとって無限ループのようなものです。なぜ "string" - "string" NaNですか?

var sM = "Hello" - "World"; 
console.log(sM) && console.log(typeof sM); 

文字列、なぜ私は理解して - 文字列がNaNを出力したが、その後"Hello" - "World"typeofnumberです。

これは、別の文字列で文字列を減算すると、numberというタイプが得られることを意味します。

ロジックはどこですか?

+0

[jQuery.isNumeric](https://api.jquery.com/jQuery.isNumeric/)は、NaN値に対してfalseを返します。 typeofは、その特定の変数型の内部記憶機構だけを返します。この場合、数値として格納されます。具体的には、NaNに対応するIEEE 754に従って格納された浮動小数点 – apokryfos

+0

なぜ数値ですか? –

答えて

7

なぜ文字列 - 減算は数値のみで扱うので、それが数字に両側を変換し、非数を取得するので、文字列はNaNに

を出力します。

しかし、 "Hello" - "World" typeofは数字です。

NaNは、番号である。 This is standard in computing

+0

ああ、数学的操作のために2つの文字列を減算すると、型は変わりますが、文字列を他の文字列で減算することはできませんので、 "Not a Number"として出力します。 – super11

+1

文字列によって異なります。 '' 12 " - " 10 "=== 2' – Quentin

+0

文字列の中で単語だけを使うのであれば? – super11

2

typeof NaNnumberです。

2つの文字列を減算できないので、減算は数字(NaN)ではありません。

NaN(数字ではない)がnumberである理由は、おそらくあまり意味がありません。 :)

あまり意味のない部分については、this answerを参照してください。

+1

また、数学演算子 '-'を追加すると、後続のものは数値に変換されるので、 –

1

これは実際には、javascript操作が新人にとって予期しない結果を生む多くの場合の間の1つに過ぎません。これは、暗黙的な型変換のために発生します。異なるタイプが関与または予想される特定の操作で自動的に発生する値の型変更です。 これらの例は、徹底的にあなたがここに、Jsの無料の本を知らないの一つから、この章で説明されています

https://github.com/getify/You-Dont-Know-JS/blob/master/types%20&%20grammar/ch4.md

私が決定的にすべてのJSの開発者に、この本のシリーズをお勧めします。

+1

共有していただきありがとうございます。 – super11

+1

これと他の多くのJSリソースは、SOのjavascriptタグ情報にあります:http://stackoverflow.com/tags/javascript/info –

関連する問題