JavaScriptのunfineとnullの違いを詳しく解説

黄舟
リリース: 2017-12-04 16:15:45
オリジナル
2047 人が閲覧しました

タイトルを見ると、この 2 つの意味が使用されていることは誰もが知っています。また、ほとんどのコンピューター言語では、「なし」を意味する値は 1 つだけであることも知っています。たとえば、C 言語 では NULL、null です。 Java 言語では None、Python 言語では None、Ruby 言語では nil です。少し奇妙なことに、JavaScript 言語には実際には「none」を表す 2 つの値があります: unknown と null。何故ですか?今回は両者の違いについてご紹介していきます!

1. 類似点

JavaScriptでは、変数にunknownとnullを代入するのは、正直言ってほとんど違いがありません。

var a = undefined;
var a = null;
ログイン後にコピー

上記のコードでは、変数にそれぞれ unfine と 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. 歴史的な理由

これは JavaScript の歴史に関連していることが判明しました。 1995年にJavaScriptが誕生したとき、当初はJavaと同様に「何もない」を表す値としてnullのみが設定されていました。

C言語の伝統に従って、nullは自動的に0に変換されるように設計されています。

Number(null)// 0
5 + null// 5
ログイン後にコピー

しかし、JavaScript の設計者であるブレンダン・アイヒ氏は、2 つの理由から、これでは十分ではないと感じています。

まず、nullはJavaと同じようにオブジェクトとして扱われます。ただし、JavaScript の

データ型は、プリミティブ型 (プリミティブ) と複合型 (コンプレックス) の 2 つのカテゴリに分類されます。Brendan Aich は、「なし」を表す値はオブジェクトではない方がよいと考えています。

第 2 に、JavaScript の初期バージョンには

エラー処理 メカニズムが含まれておらず、データ型の不一致が発生すると、多くの場合、型が自動的に変換されるか、警告なしに失敗します。 Brendan Aich は、null が自動的に 0 に変換されると、エラーを見つけるのが難しくなると感じています。

それで、ブレンダン・アイヒは別の未定義のものをデザインしました。

3. 初期設計

JavaScript の初期バージョンは次のように区別されます。null は「なし」を表すオブジェクトであり、数値に変換すると 0 になります。 「なし」を表します。元の値。数値に変換すると NaN になります。

Number(undefined)// NaN
5 + undefined// NaN
ログイン後にコピー

4. 現在の使用法

しかし、上記の区別は実際には不可能であることがすぐに判明しました。現在、null と unknown は基本的に同義ですが、いくつかの微妙な違いがあります。

null は「オブジェクトがない」ことを意味します。つまり、そこに値があってはなりません。一般的な使用法は次のとおりです:

(1)

関数のパラメーター として、関数のパラメーターがオブジェクトではないことを示します。

(2) は、オブジェクト プロトタイプ チェーンのエンドポイントとして機能します。

Object.getPrototypeOf(Object.prototype)// null
ログイン後にコピー

未定義は、「値が欠落している」ことを意味します。つまり、ここには値があるはずですが、まだ定義されていません。一般的な使用法は次のとおりです:

(1) 変数が宣言されていても値が割り当てられていない場合、その変数は未定義と等しくなります。

(2) 関数呼び出し時に、提供されるべきパラメータが提供されず、パラメータが未定義に等しい。

(3) オブジェクトには属性が割り当てられておらず、この属性の値は未定義です。

(4) 関数が値を返さない場合は、デフォルトで未定義を返します。

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 における未定義と null の違いを複数のメソッドから紹介します。これについては人それぞれの理解と理解があると思います。

関連する推奨事項:

js での null と未定義の本来の設計意図は何ですか

php は未定義インデックスの解決策を要求します

Null と未定義を探索するJavaScriptでは未定義未定義の深淵

以上がJavaScriptのunfineとnullの違いを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート