👌

JSXで使われる&&についてちょっとだけ深掘りする

2022/08/18に公開

JavaScriptの小ネタ

ドキュメントの条件付きレンダーの項に書かれているこういう書き方をきちんと理解するにはJavaScriptの論理積(&&)について理解する必要がある

jsx
{unreadMessages.length > 0 &&
  <h2>
    You have {unreadMessages.length} unread messages.
  </h2>
}

論理積(&&)

&&は左から順にFalsyかどうかを判定してFalsyな値がみつかったタイミングでその値をかえす。Falsyな値がみつからなかったら一番右の値をかえす

例1)

const x = false && true
console.log(x) // false

1つめの値を判定→falseFalsyな値なのでxfalseになる

例2)

const x = 1 && 0 && true
console.log(x) // 0

1つめの値を判定→1Truthyな値なので次の値の判定に進む
2つめの値を判定→0Falsyな値なのでx0になる

例3)

const x = 1 && true && "foo"
console.log(x) // foo

1つめの値を判定→1Truthyな値なので次の値の判定に進む
2つめの値を判定→trueTruthyな値なので次の値の判定に進む
3つめの値を判定→fooTruthyな値だけど1番右の値なのでxfooになる

論理和(||)

||は左から順にTruthyかどうかを判定してTruthyな値がみつかったタイミングでその値をかえす。Truthyな値がみつからなかったら一番右の値をかえす

例1)

const x = true || false
console.log(x) // true

1つめの値を判定→trueTruthyな値なのでxtrueになる

例2)

const x = 0 || 1 || true
console.log(x) // 1

1つめの値を判定→0Falsyな値なので次の値の判定に進む
2つめの値を判定→1Truthyな値なのでx1になる

例3)

const x = 0 || false || undefined
console.log(x) // undefined

1つめの値を判定→0Falsyな値なので次の値の判定に進む
2つめの値を判定→falseFalsyな値なので次の値の判定に進む
3つめの値を判定→undefinedFalsyな値だけど1番右の値なのでxundefinedになる

FalsyとTruthy

上の説明で使われているFalsyTruthyについて

以下はFalsyの説明の引用

Falsyな値は、Booleanコンテキストに現れたときに偽とみなされる値です。
Falsyな値は8つあります。0-00n""nullundefinedNaN

以下はTruthyの説明の引用

Falsyして定義された値 (つまり、false, 0, -0, 0n, "", null, undefined, NaN) を除くすべての値はTruthyです。

おわりに

jsx
{unreadMessages.length > 0 &&
  <h2>
    You have {unreadMessages.length} unread messages.
  </h2>
}

に戻ると、unreadMessages.length > 0Falsyの場合、JSXに埋め込まれたこの式はfalseと評価され、何もレンダリングされないことが理解できる

Discussion