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.

JavaScriptの条件(三項)演算子と条件式の型変換

Posted at

プログラミング初心者すぎてわからなかった事でした。

条件式に入れただけで型変換が自動で行われる

例えばこんなの。

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時間 だと話にならないですから…。

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?