JavaScriptのundefinedとnullの違い(詳しく解説)
ほとんどのコンピューター言語には、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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

Vue.jsで開発しているときに「TypeError: Cannotreadproperty'$XXX'ofundefine」というエラーメッセージが頻繁に表示される場合、どう対処すればよいでしょうか。この記事では、このエラーの原因と修正方法について説明します。この問題の原因は、Vue.js を使用するときに、これをよく使用して次のような Vue コンポーネントのメソッドを呼び出すことです。

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。
