JSXで使われる&&についてちょっとだけ深掘りする
JavaScriptの小ネタ
ドキュメントの条件付きレンダーの項に書かれているこういう書き方をきちんと理解するにはJavaScriptの論理積(&&)について理解する必要がある
{unreadMessages.length > 0 &&
<h2>
You have {unreadMessages.length} unread messages.
</h2>
}
論理積(&&)
&&
は左から順にFalsy
かどうかを判定してFalsy
な値がみつかったタイミングでその値をかえす。Falsy
な値がみつからなかったら一番右の値をかえす
例1)
const x = false && true
console.log(x) // false
1つめの値を判定→false
はFalsy
な値なのでx
はfalse
になる
例2)
const x = 1 && 0 && true
console.log(x) // 0
1つめの値を判定→1
はTruthy
な値なので次の値の判定に進む
2つめの値を判定→0
はFalsy
な値なのでx
は0
になる
例3)
const x = 1 && true && "foo"
console.log(x) // foo
1つめの値を判定→1
はTruthy
な値なので次の値の判定に進む
2つめの値を判定→true
はTruthy
な値なので次の値の判定に進む
3つめの値を判定→foo
はTruthy
な値だけど1番右の値なのでx
はfoo
になる
論理和(||)
||
は左から順にTruthy
かどうかを判定してTruthy
な値がみつかったタイミングでその値をかえす。Truthy
な値がみつからなかったら一番右の値をかえす
例1)
const x = true || false
console.log(x) // true
1つめの値を判定→true
はTruthy
な値なのでx
はtrue
になる
例2)
const x = 0 || 1 || true
console.log(x) // 1
1つめの値を判定→0
はFalsy
な値なので次の値の判定に進む
2つめの値を判定→1
はTruthy
な値なのでx
は1
になる
例3)
const x = 0 || false || undefined
console.log(x) // undefined
1つめの値を判定→0
はFalsy
な値なので次の値の判定に進む
2つめの値を判定→false
はFalsy
な値なので次の値の判定に進む
3つめの値を判定→undefined
はFalsy
な値だけど1番右の値なのでx
はundefined
になる
FalsyとTruthy
上の説明で使われているFalsy
とTruthy
について
以下はFalsy
の説明の引用
Falsyな値は、Booleanコンテキストに現れたときに偽とみなされる値です。
Falsyな値は8つあります。0
、-0
、0n
、""
、null
、undefined
、NaN
以下はTruthy
の説明の引用
Falsyして定義された値 (つまり、false, 0, -0, 0n, "", null, undefined, NaN) を除くすべての値はTruthyです。
おわりに
{unreadMessages.length > 0 &&
<h2>
You have {unreadMessages.length} unread messages.
</h2>
}
に戻ると、unreadMessages.length > 0
がFalsy
の場合、JSXに埋め込まれたこの式はfalse
と評価され、何もレンダリングされないことが理解できる
Discussion