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

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

Nov 23, 2019 pm 04:11 PM
javascript null undefined

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

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

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

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

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

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

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

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

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

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

TypeError: Vue で未定義のプロパティ '$XXX' を読み取れません。どのように対処すればよいですか? TypeError: Vue で未定義のプロパティ '$XXX' を読み取れません。どのように対処すればよいですか? Nov 25, 2023 pm 12:14 PM

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

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

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

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

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

See all articles