戻る

NULL合体演算子
NULL合体演算子

Null合体演算子(??)は、左辺がnullまたはundefinedの場合に右側の値を返し、
それ以外の場合は左側の値を返します。

[サンプル]
copy
//[test 1]
let A = null;
let B = 1;
let result = A ?? B;
console.log(result);//1

//[test 2]
A = 2;
B = 1;
result = A ?? B;
console.log(result);//2

//[test 3]
A = 2;
B = null;
result = A ?? B;
console.log(result);//2

//[test 4]
A = null;
B = null;
result = A ?? B;
console.log(result);//null
[test 1]
左側のAはnullです。
そのためBを値として返します

[test 2]
Aはnullでもundefinedでもないため、Aの値を返します。

[test 3]
Aの判定を最初にするためBがnullであってもAの値を返します。

[test 4]
Aがnullなので、右側のBを判定します。
Bはnullですが、Bの右側に判定するものがないためBのnullを返します。


[サンプル]
copy
const color = {
  A: {
c1:"red",
c2:"blue",
  },
  B: {
c1:"white",
c2:"black",
  }
};
function getColor(type,colorNo)
{
	return (color[type] && color[type][colorNo]) ?? (color.A && color.A[colorNo]) ?? '';
}
console.log(getColor("A", "c2"));//blue
console.log(getColor("B", "c1"));//white
console.log(getColor("C", "c1"));//red
console.log(getColor("D", "c2"));//blue
console.log(getColor("E", "c3"));//empty string

getColor関数にはNull合体演算子が使われています。
(1) (color[type] && color[type][colorNo])
(2) (color.A && color.A[colorNo])
(3) ''
(1)には論理演算子による評価が実行されます。
そのため(1)内部の
color[type]が最初に判定し、問題なければ右を判定します。
結果としてcolor[type]とcolor[type][colorNo]の両方とも問題なければ
右側のcolor[type][colorNo]を結果として返します。
(2)も考え方は同様となります。
Null合体演算子なので
(1)がダメなら(2)
(2)がダメなら(3)の''を返します。

getColor("A", "c2");//blue
A: {
c1:"red",
c2:"blue",
が存在するため、blueが返ります

getColor("B", "c1");//white
B: {
c1:"white",
が存在するため、whiteが返ります

getColor("C", "c1");//red
Cは存在しませんが、
color配列にcolor.Aの「A」が存在し
Aの要素には「c1」が存在するため、redを返しています。

getColor("D", "c2");//blue
Dは存在しませんが、
color配列にcolor.Aの「A」が存在し
Aの要素には「c2」が存在するため、blueを返しています。

getColor("E", "c3");//empty string
Eは存在しません。
color配列にcolor.Aの「A」が存在しますが、
Aの要素には「c3」が存在しないため、''(empty string)を返しています。


戻る


著作権情報
ホームページおよプリ等に掲載されている情報等については、いかなる保障もいたしません。
ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、
または公開したりすることはできません。
当方は、ホームペーよびアプリ利用したいかなる理由によっての障害等が発生しても、
その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について
一切の責任を負わないものとします。