1. ホーム
  2. javascript

[解決済み] を使うべきですか?(論理和) vs || (論理和)?

2022-09-02 02:49:25

質問

関連項目 JavaScriptに"Null合体演算子はありますか? - JavaScriptには現在 ?? 演算子があり、より頻繁に使用されているのを見かけます。以前はほとんどの JavaScript コードで || .

let userAge = null

// These values will be the same. 
let age1 = userAge || 21
let age2 = userAge ?? 21

どのような状況で ??|| は異なる動作をするのでしょうか?

どのように解決するのですか?

OR演算子 || は、左が ファルシー の場合、右の値を使いますが、nullish の合体演算子 ?? は、左が null または undefined .

これらの演算子は、最初の値がない場合にデフォルト値を提供するためによく使用されます。

しかし、OR 演算子 || は、左の値に "" または 0 または false (これらは ファルシーな値 ) :

console.log(12 || "not found") // 12
console.log(0  || "not found") // "not found"

console.log("jane" || "not found") // "jane"
console.log(""     || "not found") // "not found"

console.log(true  || "not found") // true
console.log(false || "not found") // "not found"

console.log(undefined || "not found") // "not found"
console.log(null      || "not found") // "not found"

多くの場合、left が null または undefined . それが、ヌルい合体演算子である ?? はそのためのものです。

console.log(12 ?? "not found") // 12
console.log(0  ?? "not found") // 0

console.log("jane" ?? "not found") // "jane"
console.log(""     ?? "not found") // ""

console.log(true  ?? "not found") // true
console.log(false ?? "not found") // false

console.log(undefined ?? "not found") // "not found"
console.log(null      ?? "not found") // "not found"

一方 ?? 演算子は 現在の LTS バージョンの Node (v10 and v12)では利用できませんが、TypeScriptやNodeのいくつかのバージョンでは利用できます。

?? 演算子が追加され TypeScript 3.7 では に戻って、2019年11月に

そしてさらに最近では ?? 演算子は が ES2020 に含まれています。 という、Node14(2020年4月リリース)でサポートされています。

の場合、nullishの合体演算子 ?? がサポートされている場合、私は通常これを OR 演算子の代わりに使います。 || (を使います(そうしない正当な理由がある場合を除く)。