- - PR -
JavaScript ParseIntについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-09-03 19:52
お世話になっております。
var a = "0"; var b = parseInt(a,10); if(a == b) { alert("同じ"); } 実行するとダイアログが出ます。 a と bが一致する理由がわかりません。 文字コード観点で教えてください。 よろしくお願い致します。 | ||||
|
投稿日時: 2007-09-03 20:39
alert("0" == 0);
==演算子で数値と文字列を比較するときに、型変換されて true になる。 http://www.tohoho-web.com/js/operator.htm#eq [ メッセージ編集済み 編集者: todo 編集日時 2007-09-03 20:41 ] | ||||
|
投稿日時: 2007-09-03 20:48
>todoさん
ありがとうございました。 そして申し訳ないのですが、質問するコードを間違えていました… 以下のソースです。 var a = "0"; var b = parseInt(a,10); if(b == "") { alert("同じ"); } 実行するとダイアログが出ます。 a と bが一致する理由がわかりません。 文字コード観点で教えてください。 よろしくお願い致します。 | ||||
|
投稿日時: 2007-09-03 20:58
alert(0 == "");
え?これはびっくり!! 知らなかった。 | ||||
|
投稿日時: 2007-09-03 21:13
ちなみに、
も "同じ" が表示されます。このことから推測すると、文字列のほうを数値化してから、数値同士で比較しているのでしょうね。ほかにもたとえば、(" " == 0) も true のようです。 もちろん、JavaScript のことですから言語仕様にちゃんと書いてあることなのだろうとは思いますが、意外な挙動ですね。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||
|
投稿日時: 2007-09-03 21:18
>todoさん
number型の0とString型の""の比較は todoさんの指摘にもあった型変換をしていると考えています。 (Stringとnumberの比較はString型をnumber型に自動変換して比較) 以下のページを参考にしました。 http://www.kawa.net/works/js/learn/basic.html String""をnumber型に変換すると「NaN」になります。 NaNと0は一致すると考えるのですかね? | ||||
|
投稿日時: 2007-09-03 21:20
>unibonさん
レスが重なってしましました。すいません。 JavaScriptの仕様として割り切った方がよいのですかね? | ||||
|
投稿日時: 2007-09-03 21:28
いいえ。 NaN != 0 であるので普通に不思議に思います。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |