ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptのundefinedとnullの違い(詳しく解説)

JavaScriptのundefinedとnullの違い(詳しく解説)

青灯夜游
青灯夜游転載
2019-11-23 16:11:323540ブラウズ

ほとんどのコンピューター言語には、C 言語の NULL、Java 言語の null、Python 言語の None、Ruby 言語の nil など、「なし」を表す値が 1 つだけあります。少し奇妙なことに、JavaScript 言語には実際には「何もない」ことを表す 2 つの値があります: unknown と null です。何故ですか?

JavaScriptのundefinedと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 サイトの他の関連記事を参照してください。

声明:
この記事はruanyifengで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。