概要: このチュートリアルでは、JavaScript のnull
とその効果的な処理方法について学びます。
JavaScriptのnullとは
JavaScriptのnull
は、特殊な値null
を含むプリミティブ型です。
JavaScriptではnull
値を使用して、オブジェクト値の意図的な欠落を表します。
null
を返す変数または関数がある場合、想定されるオブジェクトを作成できなかったことを意味します。
次の例では、コンストラクタが引数radius
を受け入れるCircle
クラスを定義します。Circle
クラスには、指定された半径を持つ新しいCircle
オブジェクトを返すcreate()
という静的メソッドがあります。
class Circle {
constructor(radius) {
this.radius = radius;
}
get area() {
return Math.PI * Math.pow(this.radius, 2);
}
static create(radius) {
return radius > 0 ? new Circle(radius) : null
;
}
}
Code language: JavaScript (javascript)
これにより、半径10
を持つ新しいCircle
オブジェクトが作成されます
let c = Circle.create(10);
console.log(c.area); // 31.41592653589793
Code language: JavaScript (javascript)
ただし、次の例では、radius
引数がcreate()
メソッドに渡されないため、null
が返されます
let c2 = Circle.create();
console.log(c2); // null
Code language: JavaScript (javascript)
値がnullかどうかを確認する
値がnull
かどうかを確認するには、次のように厳密等価演算子===
を使用します
value === null
Code language: JavaScript (javascript)
以下の例
const rect = null;
const square = {
dimension: 10
};
console.log(rect === null); // true
console.log(square === null); // false
Code language: JavaScript (javascript)
rect === null
は、rect
変数がnull
値に割り当てられているため、trueに評価されます。一方、square === null
はオブジェクトに割り当てられているため、false
に評価されます。
値がnull
でないことを確認するには、厳密不等演算子(!==
)を使用します
value !== null
Code language: JavaScript (javascript)
JavaScriptのnull機能
JavaScriptのnullには、次の機能があります。
1) nullは偽です
false
、0
、空の文字列(''
)、undefined
、NaN
、null
は、偽の値です。つまり、JavaScriptは条件式でnull
をfalse
に変換します。例:
const square = null;
if (square) {
console.log('The square is not null');
} else {
console.log('The square is null');
}
Code language: JavaScript (javascript)
出力
The square is null
Code language: JavaScript (javascript)
この例では、square
変数はnull
であるため、if
ステートメントはそれをfalse
と評価し、else
句のステートメントを実行します。
2) typeof nullはobjectです
typeof value
は値の型を返します。例:
console.log(typeof 10); // 'number'
Code language: JavaScript (javascript)
驚くべきことに、typeof null
は'object'
を返します
console.log(typeof null); // 'object'
Code language: JavaScript (javascript)
JavaScriptでは、null
はプリミティブ型であり、オブジェクトではありません。これは、JavaScriptの最初のバージョンから修正されない可能性がある歴史的なバグです。
一般的なJavaScriptのnullの間違い
JavaScriptでは、関数を呼び出してオブジェクトを取得することがよくあります。その後、そのオブジェクトのプロパティにアクセスします。
ただし、関数がオブジェクトではなくnull
を返した場合、TypeError
が発生します。例:
let classList = document.querySelector('#save').classList;
Code language: JavaScript (javascript)
この例では、idがsave
の要素を選択し、そのclassList
プロパティにアクセスします。
ページにid save
を持つ要素がない場合、document.querySelector('#save')
はnull
を返します。その結果、null
値のclassName
プロパティにアクセスするとエラーになります
Uncaught TypeError: Cannot read property 'classList' of null
Code language: JavaScript (javascript)
これを回避するには、null合体演算子(?.
)を使用できます。
object ?. property
null合体演算子は、null
(またはundefined
)値のプロパティにアクセスしようとしたときにエラーをスローする代わりに、undefined
を返します。
次の例は、エラーではなくundefined
を返すnull合体演算子を使用しています
let classList = document.querySelector('#save')?.classList;
Code language: JavaScript (javascript)
JavaScript の null と undefined
null
と undefined
はどちらもプリミティブ値です。
undefined
は初期化されていない変数やオブジェクトプロパティの値です。
たとえば、値を初期化せずに変数を宣言すると、変数の評価結果はundefined
になります
let counter;
console.log(counter); // undefined
Code language: JavaScript (javascript)
null
は意図的にオブジェクトが存在しない状態を表す一方、undefined
は意図せず値が存在しない状態を表します。
言い換えると、null
は存在しないオブジェクトを表す一方、undefined
は初期化されていない変数を表します。
ゆるい等価演算子(==
)を使用すると、null
と undefined
は等しくなります
console.log(null == undefined); // true
Code language: JavaScript (javascript)
厳密等価演算子 ===
はnull
とundefined
を区別します。たとえば
console.log(null === undefined); // false
Code language: JavaScript (javascript)
まとめ
- Javascript の
null
は、nullという1つの値を持つプリミティブ型です。 - JavaScript は、存在しないオブジェクトを表すためにnull値を使用します。
- 値が
null
かどうかを確認するには、厳密等価演算子(===
)を使用します。 typeof null
は'object'
を返しますが、これはJavaScriptの歴史的なバグであり、修正されない可能性があります。- nullである可能性があるオブジェクトのプロパティにアクセスするには、null合体演算子(
?.
)を使用します。