テキストと数値の取り扱い比較
JavaScriptにおいて、文字列と数値を誤って処理した場合の影響を比較検証
テキスト
表示
isNaN
空判定
空否定
0判定
0否定
0超過
結合
計算
isNaN
(s)
(s
== ""
)
(s
!= ""
)
(s
== 0
)
(s
!= 0
)
(s
> 0
)
s + "1"
s + 1
isNaNは数値でない場合にtrue、数値ならfalse
文字列
不明
不明
不明
不明
不明
不明
不明
不明
不明
s = document.form1.textfield.
value
;
数値化1
不明
不明
不明
不明
不明
不明
不明
不明
不明
s =
parseInt
(s); 整数値
数値化2
不明
不明
不明
不明
不明
不明
不明
不明
不明
s =
eval
(s); 計算式
ブラウザ
表示
isNaN
空判定
空否定
0判定
0否定
0超過
結合
計算
IE7,IE8,Forefox 3.5, 4.0
abc
abc
true
false
true
false
true
false
abc1
abc1
数値化に失敗した後、結合、計算にもその影響がそのまま残っている。
NaN
true
false
true
false
true
false
NaN1
NaN
undefined
true
false
true
false
true
false
undefined
1
NaN
12.3
12.3
false
false
true
false
true
true
12.31
12.31
数値化しなくても数値として正常に判定されている。ただし、計算に違いが出ている。
12
false
false
true
false
true
true
121
13
12.3
false
false
true
false
true
true
12.31
13.3
5-4
5-4
true
false
true
false
true
false
12.31
12.31
表示の段階で、数値化1では文字列までの数字を取得、数値化2は式として入力されている。
5
false
false
true
false
true
true
121
13
1
false
false
true
false
true
true
12.31
13.3
""
false
true
false
true
false
false
1
1
文字列の場合、0の数値化1と同じ結果。isNaNにてfalse(数値)となり、0判定もtrueとして、数値の0と同じ扱い。結合、計算においては文字列として扱われている。
NaN
true
false
true
false
true
false
NaN1
NaN
undefined
true
false
true
false
true
false
undefined1
NaN
" "
false
false
true
true
false
false
1
1
空白。文字列だがisNaNでfalse、0判定でtrueとなっている。0と同じ。
NaN
true
false
true
false
true
false
NaN1
NaN
undefined
true
false
true
false
true
false
undefined1
NaN
0
0
false
false
true
true
false
false
01
01
文字列でもsiNaNは数値としてfalseを示す。そのため0判定でもtrueとなる。
0
false
true
false
true
false
false
01
1
0
false
true
false
true
false
false
01
1
戻る