本論
「(変数)が空の時だけ表示されるメッセージが、空でないときも表示される」というバグがあった。その判定用の関数を調べてみたところ、
return v.length > 0;
といった風なコードが書かれていた。しかし同じv
を扱っている処理をよく見てみると、
Object.keys(v).length
のような表記がされていた。なので判定用の関数を同様の表記にしたところ、バグは解消された。
後で気になって、何故エラーを吐かずにv.length > 0
がfalse
になっていたのかを調べてみたところ、どうやら以下のようになっていたらしい。
v
は配列ではなくオブジェクトで、プロパティlength
が設定されている訳でもないので、v.length
はundefined
になる。そのundefined
に対して大小比較を行うと、必ずfalse
になる。
結論
扱う変数がオブジェクトか配列かなど、どのような物であるかを把握するのは重要。
最後に
このバグを仕込んだのも解決したのも私でした。以後気をつけます。