プログラミング初心者すぎてわからなかった事でした。
条件式に入れただけで型変換が自動で行われる
例えばこんなの。
import { getAuth, onAuthStateChanged } from "firebase/auth";
const auth = getAuth();
onAuthStateChanged(auth, (user) => {
user = user ? user : {};
signin = user.uid ? true : false;
})
この ?
が条件(三項)演算子と呼ばれるもので、引数には
condition ? exprIfTrue : exprIfFalse
を取ります。
condition
は条件式
exprIfTrue
は条件式が真の時に返す値
exprIfFalse
は条件式が偽の時に返す値
です。
参考:JavaScript | MDN
上のコードはFirebase Authenticationでユーザーのログイン状態を取得するためのものですが、
user = user ? user : {}
このuser
が3つ並んでるのを見て、私の頭の中も???になりました。
どうしてモジュールのuser
が条件式に入ってるんだ…?
と思って調べたら解決は簡単でして、
条件式が入るべき引数には自動的に
Boolean(user)
として型変換が実行されているだけでした。
なので、
user = Boolean(user) ? user : {}
と書くと、
Redundant Boolean call. (no-extra-boolean-cast)
(たくさんBooleanしすぎ!)
と怒られます。
そして、Boolean() は
一番目の引数に渡された値は、必要に応じて論理値に変換されます。値が省略された場合や、値が 0, -0, null, false, NaN, undefined あるいは空文字列 ("") であった場合、オブジェクトは false の初期値を持ちます。それ以外のあらゆる値は、オブジェクトや "false" という文字列も含めて、 true の初期値を持つオブジェクトを生成します
参考:JavaScript | MDN
とあるので、文字列だろうが何だろうが0, -0 null, false, NaN, underfined以外の何かが入っていればtrueを返すんですね。簡単そうな事なのに知らなんだ。
先程のuser
が3つ並んだコードは中身がnullの場合に空のモジュールを返すという事でした。
あとがき
どんな小さな事でも見つけたら書いていく事にします。
この辺りの執筆速度が、質問を投稿する時の速度にも影響するので早くしていきたいですね。
15分経って分からなかったら質問 → 質問文を書くのに1時間 だと話にならないですから…。