近年、Null安全という言葉と共に、各言語でNullを安全に扱うための構文が一般的になってきています。
こちらの記事にあるように、この流れはJavaScriptに限った話ではありません。
今回はJavaScriptに限った話になりますが、Nullを扱う際に便利な構文をいくつか紹介できればと思います。
論理和を使用すると、変数のデフォルト値を定義する際に便利です。これはJavaScriptの特性によるもので、JavaScriptではnull
をfalse
として判定する言語仕様となっています。(null
以外にも数値の0なども同様です。)
そのため、以下のコードを実行すると、hoge || "default"
は、変数hogeがfalse
として扱われることにより論理和の右辺が評価され"default"
がobj
に代入されることとなります。
let hoge = null
let obj = hoge || "default";
console.log(obj)
Optional Chaining (?.)
次に、Optional chainingを見ていきます。
こちらは、変数がnull
の場合にundefined
を、そうでなければチェインした式を実行することになります。例を見てみましょう。
var user1 = {
name: "hoge",
age: 30,
address: {
country: "japan",
city: "tokyo"
}
}
var user2 = {
name: "hoge",
age: null,
address: null
}
console.log(user1?.name)
console.log(user1.address?.country)
console.log(user2.address?.country)
この構文を使用すると、万が一変数がnull
であったとしても実行時エラーとなりません。例えばuser2.address.country
として呼び出すと、TypeError: Cannot read property 'country' of null
が発生してしまいます。
とはいえ、undefined
が返されるというのも実用的ではありませんので、Optional Chainingは後述するNull合体と一緒に使うと良いでしょう。
Null合体 (??)
というわけでNull合体を見ていきましょう。
Null合体演算子??
を使用すると、左辺の値がnull
またはundefined
の時、右辺を返し、それ以外の場合は左辺の値を返します。
var user2 = {
name: "hoge",
age: null,
address: null
}
console.log(user2?.name)
console.log(user2.address?.country ?? "unknown")
Null合体とoptional chainingを組み合わせることで安全な変数の取り扱いができるようになります。
Null合体代入 (??=)
最後に、Null合体代入を見てみましょう。
Null合体代入を使用すると、変数がnull
またはundefined
の場合にのみ値の代入ができるようになります。
例を見てみましょう。
let a = null
a ??= 100
let b = 50
b ??= 100
console.log(a)
console.log(b)
以上、JavaScriptでnull
を安全に使う方法をいくつか紹介しました。
ただ、これから何かJavaScriptで作ろうとしているのなら、TypeScriptを使えばよりnull
に対して安全になるので、そちらも考慮しても良いかもしれません。
それではまた。