ほとんどのコンピューター言語には、C 言語の NULL、Java 言語の null、Python 言語の None、Ruby 言語の nil など、「なし」を表す値が 1 つだけあります。少し奇妙なことに、JavaScript 言語には実際には「何もない」ことを表す 2 つの値があります: unknown と null です。何故ですか?
1. 類似性
JavaScript では、変数を未定義または null に代入します。 、ほとんど違いはありません。
var a = undefined; var a = null;
上記のコードでは、変数 a にそれぞれ未定義と null を代入していますが、2 つの記述方法はほぼ同等です。
未定義と null は、if ステートメントで自動的に false に変換され、等価演算子はそれらが等しいことを直接報告します。
if (!undefined) console.log('undefined is false'); // undefined is false if (!null) console.log('null is false'); // null is false undefined == null // true
上記のコードは、2 つの動作がいかに似ているかを示しています。
未定義と null の意味と使用法は似ているのに、なぜこのような値を 2 つ同時に設定する必要があるのでしょうか?これは理由もなく JavaScript の複雑さを増大させ、初心者を悩ませませんか? Google が開発した JavaScript 言語の代替である Dart 言語では、null のみが存在し、未定義は存在しないと明確に規定されています。
2. 歴史的な理由
最近、新しい本 「Speaking JavaScript」 を読んでいたとき、うっかりこの問題の答えを発見しました!
これは JavaScript の歴史に関係していることがわかりました。 1995年にJavaScriptが誕生したときは、Javaと同様に「なし」を表す値としてnullのみが設定されていました。 C 言語の伝統に従って、null は自動的に 0 に変換されるように設計されています。
Number(null) // 0 5 + null // 5
しかし、JavaScript デザイナーの Brendan Aich は、2 つの理由から、これでは十分ではないと感じています。
まず、null は Java と同じようにオブジェクトとして扱われます。ただし、JavaScript のデータ型は、プリミティブ型 (プリミティブ) と複合型 (コンプレックス) の 2 つのカテゴリに分類されており、Brendan Eich 氏は、「なし」を表す値はオブジェクトではない方がよいと考えています。
第二に、JavaScript の初期バージョンにはエラー処理メカニズムが含まれていなかったため、データ型の不一致が発生すると、多くの場合、型が自動的に変換されるか、サイレントに失敗します。 Brendan Eich は、null が自動的に 0 に変換されると、エラーを見つけるのが難しくなると感じています。
そこで、ブレンダン・アイヒは別の未定義のものを設計しました。
3. 初期設計JavaScript の初期バージョンは次のように区別されます: null は「なし」を表すオブジェクトであり、変換されます数値に変換すると0、undefinedは「なし」を表すプリミティブ値であり、数値に変換するとNaNとなります。
Number(undefined) // NaN 5 + undefined // NaN
4. 現在の使用法ただし、上記の区別は実際には不可能であることがすぐに判明しました。現在、null と unknown は基本的に同義ですが、いくつかの微妙な違いがあります。
null は「オブジェクトがない」ことを意味します。つまり、値があってはなりません。一般的な使用法は次のとおりです:
(1) 関数のパラメータとして、関数のパラメータがオブジェクトではないことを意味します。
(2) オブジェクト プロトタイプ チェーンのエンドポイントとして。
Object.getPrototypeOf(Object.prototype) // null
unknown は、「値が欠落している」ことを意味します。つまり、ここに値があるはずですが、まだ定義されていません。一般的な使用法は次のとおりです。
(1) 変数が宣言されていても値が割り当てられていない場合、その変数は unknown と等しくなります。
(2) 関数呼び出し時に、指定すべきパラメータが指定されておらず、パラメータが未定義です。
(3) オブジェクトには属性が割り当てられておらず、この属性の値は未定義です。
(4) 関数が値を返さない場合、デフォルトでは undefine を返します。
var i; i // undefined function f(x){console.log(x)} f() // undefined var o = new Object(); o.p // undefined var x = f(); x // undefined
(終了)
推奨学習:
JavaScript チュートリアル以上がJavaScriptのundefinedとnullの違い(詳しく解説)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。