1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

本論

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

return v.length > 0;

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

Object.keys(v).length

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

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

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

結論

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

最後に

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?