Javascriptでは変数をvarで宣言し(省略可)、明示的に変数の型を宣言しませんが、内部的にはちゃんと変数にも型があります。この型の違いにより計算結果が予想と違うものになってしまう場合があります。
私もある程度いろいろな言語でのプログラミングには慣れているつもりなのですが、それでもこのような型の違いによる間違いに陥って気づかない場合があります。
例えば、After EffectsのExperssionではtimeを使って時間を取得できますが、これはfloat型(浮動小数点数型)になるので剰余などを求める際は型をparseInt()という型変換用の関数を使ってint型(整数型)にキャスト(型の変換)する必要がでてきますので注意が必要です。
この型の違いによる間違いの具体的な例を挙げます。以下の例ではtimeがfloat型なのに型をキャストしなかったために、自動的に変数frameもfloat型になってしまい、剰余の計算が正しく行われなくなってしまいます。
var widthFrame=4;
var frame=time*24;
if(frame%widthFrame==0){
100;
}else{
0;
}
var frame=time*24;
if(frame%widthFrame==0){
100;
}else{
0;
}
上の例を正しくしたもの(frameをint型にキャスト)
var widthFrame=4;
var frame=parseInt(time*24);
if(frame%widthFrame==0){
100;
}else{
0;
}
var frame=parseInt(time*24);
if(frame%widthFrame==0){
100;
}else{
0;
}