Help us understand the problem. What is going on with this article?

配列の長さを測ろうとしたらオブジェクトだった話

本論

「(変数)が空の時だけ表示されるメッセージが、空でないときも表示される」というバグがあった。その判定用の関数を調べてみたところ、

return v.length > 0;

といった風なコードが書かれていた。しかし同じvを扱っている処理をよく見てみると、

Object.keys(v).length

のような表記がされていた。なので判定用の関数を同様の表記にしたところ、バグは解消された。

後で気になって、何故エラーを吐かずにv.length > 0falseになっていたのかを調べてみたところ、どうやら以下のようになっていたらしい。

vは配列ではなくオブジェクトで、プロパティlengthが設定されている訳でもないので、v.lengthundefinedになる。そのundefinedに対して大小比較を行うと、必ずfalseになる。

結論

扱う変数がオブジェクトか配列かなど、どのような物であるかを把握するのは重要。

最後に

このバグを仕込んだのも解決したのも私でした。以後気をつけます。

sencorp
幼稚園・保育園向けインターネット写真サービス「はいチーズ!」を提供しています。
https://sencorp.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away