null、未定義、およびブール値
null および未定義
概要
「null」と「unknown」は両方とも「なし」を意味し、非常によく似た意味を持ちます。正直に言うと、変数を「未定義」に代入する場合も「null」に代入する場合も、構文にほとんど違いはありません。
var a = 未定義;
// または
var a = null;
上記のコードでは、変数 a
がそれぞれ unknown
と null
に代入されていますが、これら 2 つの書き方の効果はほぼ同等です。
if
ステートメントでは、それらは自動的に false
に変換され、等価演算子 (==
) はそれらが等しいことを直接報告することもあります。
if (!未定義) {
console.log('未定義は false');
}
// 未定義は false
if (!null) {
console.log('null は false');
}
// null は false
未定義 == null
// 真実
上記のコードから、この 2 つの動作がいかに似ているかがわかります。 Google が開発した JavaScript 言語の代替である Dart 言語では、「null」のみが存在し、「unknown」は存在しないと明確に規定されています。
意味も使い方も似ているのに、なぜこのような値を 2 つ同時に設定するのは、理由もなく複雑さが増し、初心者を悩ませませんか?これには歴史的な理由が関係しています。
JavaScript が 1995 年に誕生したときは、Java と同様に、「なし」を意味する「null」のみが設定されていました。 C言語の伝統によれば、「null」は自動的に「0」に変換されます。
数値(null) // 0
5 + null // 5
上記のコードでは、「null」を数値に変換すると、自動的に 0 になります。
しかし、JavaScript の設計者であるブレンダン・アイヒ氏は、これでは十分ではないと感じました。まず、JavaScript の最初のバージョンでは、「null」は Java と同じようにオブジェクトとして扱われていました。Brendan Aich は、「何もない」ことを表す値はオブジェクトではない方がよいと考えました。第 2 に、当時の JavaScript にはエラー処理メカニズムが含まれていませんでした。Brendan Eich は、「null」が自動的に 0 に変換されるとエラーを見つけるのが困難になると考えました。
したがって、彼は別の「未定義」を設計しました。違いは次のとおりです。「null」は「空」を表すオブジェクトであり、数値に変換すると「0」になります。「未定義」は「ここに定義がない」ことを表すプリミティブ値であり、数値に変換すると「NaN」になります。数値に変換されます。
数値(未定義) // NaN
5 + 未定義 // NaN
使用法と意味
「null」と「undefine」については、大まかに以下のように理解できます。
「null」は null 値、つまり、その値が空であることを意味します。関数を呼び出すときに、パラメーターに値が設定されていない場合は、パラメーターが空であることを示すために「null」を渡すことができます。たとえば、関数はエンジンによってスローされたエラーをパラメータとして受け入れます。操作中にエラーが発生しなかった場合、このパラメータはエラーが発生しなかったことを示す「null」で渡されます。
「未定義」は「未定義」を意味します。以下は、「未定義」が返される一般的なシナリオです。
// 変数は宣言されていますが、値は割り当てられていません
変数 i;
i // 未定義
// 関数呼び出し時に、提供されるべきパラメータが提供されておらず、パラメータが未定義に等しい
関数 f(x) {
x を返します。
}
f() // 未定義
// オブジェクトには割り当てられたプロパティがありません
var o = 新しいオブジェクト();
o.p // 未定義
// 関数が値を返さない場合は、デフォルトで未定義を返します。
関数 f() {}
f() // 未定義
ブール値
ブール値は「true」と「false」の2つの状態を表します。 「真」はキーワード「true」で表され、「偽」はキーワード「false」で表されます。ブール値にはこれら 2 つの値しかありません。
次の演算子はブール値を返します。
- 接頭辞付き論理演算子:
!
(否定) - 等価演算子:
===
、!==
、==
、!=
- 比較演算子:
>
、>=
、<
、<=
JavaScript がある位置でブール値を予期している場合、その位置の既存の値がブール値に自動的に変換されます。変換ルールは、以下の6つの値を除いて「false」に変換され、それ以外の値は「true」とみなされます。
- 「未定義」
- 「ヌル」
- 「偽」
0
- 'NaN'
""
または''
(空の文字列)
ブール値はプログラム フローを制御するためによく使用されます。例を参照してください。
もし ('') {
console.log('true');
}
// 出力なし
上記コードでは、「if」コマンド以降の判定条件がブール値であることが想定されているため、JavaScriptが空文字列をブール値「false」に自動変換してプログラムがコードブロックに入らないようにするため、出力はありません。
空の配列 ([]
) と空のオブジェクト ({}
) に対応するブール値は両方とも true
であることに注意してください。
もし ([]) {
console.log('true');
}
// 真実
もし ({}) {
console.log('true');
}
// 真実
データ型変換の詳細については、「データ型変換」の章を参照してください。
参考リンク
- Axel Rauschmayer、JavaScript での値の分類
作者: wangdoc
アドレス: https://wangdoc.com/
ライセンス: クリエイティブ・コモンズ 3.0