- PR -

JavaScript ParseIntについて

投稿者投稿内容
あき
会議室デビュー日: 2006/08/22
投稿数: 9
投稿日時: 2007-09-03 19:52
お世話になっております。

var a = "0";
var b = parseInt(a,10);

if(a == b) {
alert("同じ");
}

実行するとダイアログが出ます。
a と bが一致する理由がわかりません。

文字コード観点で教えてください。
よろしくお願い致します。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2007-09-03 20:39
alert("0" == 0);

==演算子で数値と文字列を比較するときに、型変換されて true になる。

http://www.tohoho-web.com/js/operator.htm#eq




[ メッセージ編集済み 編集者: todo 編集日時 2007-09-03 20:41 ]
あき
会議室デビュー日: 2006/08/22
投稿数: 9
投稿日時: 2007-09-03 20:48
>todoさん
ありがとうございました。

そして申し訳ないのですが、質問するコードを間違えていました…
以下のソースです。

var a = "0";
var b = parseInt(a,10);

if(b == "") {
alert("同じ");
}

実行するとダイアログが出ます。
a と bが一致する理由がわかりません。

文字コード観点で教えてください。
よろしくお願い致します。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2007-09-03 20:58
alert(0 == "");

え?これはびっくり!!
知らなかった。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2007-09-03 21:13
ちなみに、
コード:
if ("0e0" == 0) {
    alert("同じ");
}


も "同じ" が表示されます。このことから推測すると、文字列のほうを数値化してから、数値同士で比較しているのでしょうね。ほかにもたとえば、(" " == 0) も true のようです。
もちろん、JavaScript のことですから言語仕様にちゃんと書いてあることなのだろうとは思いますが、意外な挙動ですね。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
あき
会議室デビュー日: 2006/08/22
投稿数: 9
投稿日時: 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は一致すると考えるのですかね?


あき
会議室デビュー日: 2006/08/22
投稿数: 9
投稿日時: 2007-09-03 21:20
>unibonさん

レスが重なってしましました。すいません。
JavaScriptの仕様として割り切った方がよいのですかね?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-09-03 21:28
いいえ。 NaN != 0 であるので普通に不思議に思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)