数式を記述し、'+'で数値演算を行っているつもりだが、なぜか文字列の結合になってしまう。
'-'など他の演算子は、正常に動く。
[原因]'-'など他の演算子は、正常に動く。
変数の宣言が不十分
[解説]
JavaScriptでは、変数の型を宣言しなくとも、スクリプトの実行には特に障害がない。それは、JavaScript(あるいはブラウザ?)側で、適当に解釈し、文字列処理か数値演算かを判断・実行しているため。
文字列処理と判断されると、
文字列処理と判断されると、
'3'+2='32'
3+2=5・・・・・・・・・>こちらではない
と文字の結合になってしまう。 3+2=5・・・・・・・・・>こちらではない
[回避方法]
①'+'を使用しない
演算子の'+'を使用せず、'-'を使用する。ぱっと見、わかりにくい。
②varで変数の宣言を行う
宣言とか特にしなくとも、動作するが、varとNumberオブジェクトで、変数をNumberオブジェクトに格納し、数値型に変換して、演算をする。こちらの方が、後から見た時、わかりやすい。
※varを省略すると、グローバル変数として認識される。
③演算の前に、変数が数値型である事を明示する
具体的には、使用する数値に、値の変わらない演算をしておく。後から見返すと、よくわからなくなる。
④文字列→数値へ変換する関数、parseInt()、parseFloat()を使用する
・パラメーター
文字列:変換する文字列
基数:省略可。進数を指定(2,8,10,16)。省略時は10進法となる
・戻り値
文字列の先頭が数値でない・空文字→NaNを返す
数字で始まり、途中から数字でないものを含む文字列→数字の部分までを数値に変換する
※スクリプト関連の予約語('JavaScript'など)を、半角文字で記述すると、本エディッタが混乱するのか、文法チェックでエラーとなり保存できないので、全角文字にしてある。
(単なる、メモ書きなので、間違いがあるかもしれない。)演算子の'+'を使用せず、'-'を使用する。ぱっと見、わかりにくい。
× a=a+b;
○ a=a-(-b);
○ a=a-(-b);
②varで変数の宣言を行う
宣言とか特にしなくとも、動作するが、varとNumberオブジェクトで、変数をNumberオブジェクトに格納し、数値型に変換して、演算をする。こちらの方が、後から見た時、わかりやすい。
var Number(b);
a=a+b;
a=a+b;
※varを省略すると、グローバル変数として認識される。
③演算の前に、変数が数値型である事を明示する
具体的には、使用する数値に、値の変わらない演算をしておく。後から見返すと、よくわからなくなる。
b=b-0;
a=a-0;
a=a+b;
a=a-0;
a=a+b;
④文字列→数値へ変換する関数、parseInt()、parseFloat()を使用する
parseInt(文字列 {、基数})→整数に変換
parseFloat(文字列 {、基数})→小数に変換
parseFloat(文字列 {、基数})→小数に変換
・パラメーター
文字列:変換する文字列
基数:省略可。進数を指定(2,8,10,16)。省略時は10進法となる
・戻り値
文字列の先頭が数値でない・空文字→NaNを返す
数字で始まり、途中から数字でないものを含む文字列→数字の部分までを数値に変換する
※スクリプト関連の予約語('JavaScript'など)を、半角文字で記述すると、本エディッタが混乱するのか、文法チェックでエラーとなり保存できないので、全角文字にしてある。
+++
0 件のコメント:
コメントを投稿