delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

JSとPythonでは空のlist(Array)の真偽値が異なる

まとめ

経緯

JSで以下のようなコードを書いたら、arrが空のArrayの場合でもif文の中に入ってこないことに気づいた。

# arrはArray
if (!arr) {
  console.log("arr is empty.");
}

Pythonでは空のlistはFalseになるので、検証してみたところ、やはりJSはTrueだった。

・JS

$ node
Welcome to Node.js v15.5.0.
Type ".help" for more information.
> Boolean([])
true

Python

$ python3
Python 3.7.3 (default, Apr  7 2020, 14:06:47)
[Clang 11.0.3 (clang-1103.0.32.59)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> bool([])
False

従って、JSの場合は以下のように書かないといけない。(arrがnullを許可していない前提)

# arrはArray
if (arr.length === 0) {
    console.log("arr is empty.");
}

言われてみれば、昔JQueryとか書いてたときに、Arrayのemptyチェックは上のように書いていた気がする。

ここ1年くらいPythonばっかりやってたから、感覚がPythonで上書きされていたのかもしれない。

言語によって真偽値の仕様って微妙に異なるんだなと勉強になった。