ホームページ ウェブフロントエンド jsチュートリアル JavaScript_javascript テクニックにおけるプリミティブ データ型 Null および Unknown の詳細な説明

JavaScript_javascript テクニックにおけるプリミティブ データ型 Null および Unknown の詳細な説明

May 16, 2016 pm 03:25 PM
javascript null undefined

JavaScript のプリミティブ データ型について議論するとき、ほとんどの人は文字列、数値、ブール値までの基本を知っています。これらのプリミティブ型は非常に単純で、常識のように動作します。ただし、この記事では、ユニークなプリミティブ データ型である Null と Unknown、およびそれらが非常に似ていながらも矛盾している理由に焦点を当てます。

1. Null と未定義について理解する
JavaScript では、null は言語のリテラルおよびキーワードであり、認識できないオブジェクト値を表すために使用されます。つまり「価値がない」という意味で使われます。似ていますが、未定義は実際には値が存在しないことを表します。これらは完全に不変であり、プロパティやメソッドを持たず、プロパティに値を割り当てることもできません。実際、プロパティにアクセスまたは定義しようとすると、TypeError が発生します。名前が示すように、これらは完全に無効な値です。

値なしで表されるブール値は false です。これは、if ステートメントなどの条件付きコンテキストで false と評価されることを意味します。等価演算子 (==) を使用して、これら 2 つの値を他の false 値と比較します。それらは、それ自体を除いて等しくありません:

null == 0; // false
undefined == ""; // false
null == false; // false
undefined == false; // false
null == undefined; // true
ログイン後にコピー

ただし、その他の類似点として、null と unknown は同等ではありません。それぞれは独自の型の一意のメンバーであり、unknown は未定義型、null は Null 型です。以下に示すように、型と値の両方が等しい必要がある等価演算子 (===) を使用して、これら 2 つの値を比較します。

undefined === null; // false
ログイン後にコピー
これは、さまざまな目的と理由に役立つ重要な区別です。これら 2 つの値を区別するために、unknown は予期しない値がないことを表し、null は期待される値がないことを表すと考えることができます。


2. 未定義を生成 未定義の値を含むコードを生成するには、さまざまな方法があります。通常、存在しない値にアクセスしようとしたときに発生します。この場合、JavaScript のような動的で型付けが弱い言語では、エラーが発生するのではなく、デフォルトで未定義の値が返されます。
初期値なしで宣言された変数は、デフォルト値が未定義になります:

 var foo; // 默认值为 undefined
ログイン後にコピー
存在しないオブジェクト プロパティまたは配列項目にアクセスしようとすると、未定義の値が返されます:

var array = [1, 2, 3];
var foo = array.foo; // foo 属性不存在, 返回 undefined
var item = array[5]; // 数组中没有索引为5的项,返回 undefined
ログイン後にコピー
関数の return ステートメントが省略された場合、未定義が返されます:

var value = (function(){})(); // 返回 undefined
ログイン後にコピー
関数の呼び出し時に値が指定されていない場合、パラメータ値は未定義になります:

(function(undefined){
  // 参数是 undefined
})();
ログイン後にコピー
void 演算子は未定義の値を返すこともできます。 Underscore のようなライブラリは、これを防御的な型チェックとして使用します。これは、これが不変であり、どのようなコンテキストでも依存して未定義を返すことができるためです:

function isUndefined(obj){
  return obj === void 0;
}
ログイン後にコピー
最後に、未定義は、(null キーワードとは異なり) 未定義の値に初期化された事前定義されたグローバル変数です。

'undefined' in window; // true
ログイン後にコピー
ECMAScript 5 では、この変数は読み取り専用ですが、以前はそうではありませんでした。

3. Null の使用例 null の使用例は、null を異なるものにする主な側面です。未定義とは異なり、null はより便利であると考えられているからです。 typeof 演算子が null 値に適用されると「object」を返すのはこのためです。元の理論的根拠は、プレースホルダーと同様に、null オブジェクトが予期されるため、null 参照が通常使用されるというものであり、現在でもそうです。 typeof のこの動作はバグとして確認されており、修正が提案されましたが、下位互換性のために変更されていません。
このため、JavaScript 環境では値を null に設定することはなく、プログラムで行う必要があります。 MDN のドキュメントには次のように書かれています:

API では、オブジェクトが取得される場所で null が予期されることがよくありますが、関連するオブジェクトはありません。
これは、言語に依存せず、ECMAScript 仕様の範囲外である DOM に適用されます。これは外部 API であるため、存在しない要素を取得しようとすると、未定義ではなく null 値が返されます。
一般に、不変の値を変数またはプロパティに割り当てる必要がある場合、それを関数に渡す必要がある場合、または関数から null を返す必要がある場合は、ほとんどの場合、null が最良の選択です。要するに、JavaScript は unfineed を使用し、プログラマは null を使用する必要があります。
null のもう 1 つの使用例は、参照が必要なくなったときに、変数を無効 (object= null) として明示的に指定することです。 Null 値を割り当てることにより、参照は実質的にクリアされ、オブジェクトが他のコードによって参照されていないことを前提として、メモリが確実に再利用されるようにガベージ コレクションが指定されます。

4. さらに深く掘り下げる null と unknown をブラック ホールのようにしているのは、その動作だけではなく、JavaScript 環境内での内部的な処理方法にもあります。多くの場合、それらは他のネイティブ オブジェクトや組み込みオブジェクトと同じ関連特性を持っていないように見えます。
ES5 では、Object.prototype.toString メソッドが事実上の型チェック標準となり、null および未定義との一貫性が証明されています。

然而,Object.prototype.toString方法其實並不是檢索null的內部[[Class]]屬性或undefined的公開建構子。根據文檔,以下步驟發生在被調用過程中:

如果值是undefined,則回傳「[object Undefined]」。

  • 如果這個值為null,則回傳「[object Null]」。
  • 讓O作為呼叫ToObject同時傳遞this值作為參數的結果值。
  • 讓class是O的內部屬性[[Class]]的值。
  • 傳回的結果連接三個字串“[object ”,class,和“]”的結果的字串值。

該方法執行一個簡單的字串回傳值,如果它偵測到null或undefined和其他物件統一的功能。在整個規範中這是很常見的,因為當遇到null和undefined值時大多數方法包含一個簡單的捕捉並傳回。事實上,沒有跡象表明他們包含與任何原生物件相關聯的內部屬性。就好像他們不是對象。我很想知道如果一個JavaScript的原生環境內部實際存在的明確方案會怎麼樣?也許有人更熟悉一個可以參與的實現。

結論
無論這些原生物件多麼不尋常,理解null和undefined之間的差異,和他們在JavaScript的語言基礎中截然不同的角色。它可能不能使你的應用程式有所突破,但是一般來說,它僅被證明在開發和調試中長期有益。

以上就是針對javascript中原始資料類型Null和Undefined進行的介紹,希望對大家的學習有所幫助。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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