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