ECMAScriptにおけるプリミティブ値と参照値の詳しい説明

ECMAScriptにおけるプリミティブ値と参照値の詳しい説明

序文

これは JavaScript の非常に基本的な知識ポイントであるはずですが、多くの友人は面接中に簡単に触れただけで、それについて何も知らないようです。ここでは、以前のメモと合わせて、プリミティブ値と参照値の関連知識を簡単に紹介します。それでは始めましょう。

ECMAScript では、変数にはプリミティブ値または参照値の 2 つのデータ型を含めることができると規定されています。プリミティブ値は最も単純なデータ構造ですが、参照値は複数の値で構成されるオブジェクトです。

プリミティブ値は、Undefined、Null、Boolean、Number、String、Symbol の計 6 種類あります。プリミティブ値を操作するということは、格納変数内の実際の値を操作することを意味します。

参照値は、メモリに格納されているオブジェクトです。JavaScript はメモリ位置に直接アクセスできないため、オブジェクトが配置されているメモリ空間を直接操作することはできません。オブジェクトを操作する場合、実際にはオブジェクト自体ではなく、オブジェクトの参照を操作しています。

動的プロパティとは何ですか?

動的プロパティとは、参照値が作成された後、そのプロパティとメソッドを動的に追加、変更、削除できることを意味します。例:

obj = new Object();
obj.name = "サム";

console.log(obj.name); // "サム"

説明: まず、参照値オブジェクトが作成され、変数 obj に格納されます。次に、名前属性が値 "Sam" で obj に割り当てられます。このプロパティが変更/削除されない限り、このプロパティを直接印刷したりアクセスしたりできます。

プリミティブ値には属性を持たせることはできませんが、属性操作を実行してもエラーは報告されません。例:

let me = "Sam";
me.sex = "男性";

console.log(me.sex); // 未定義

ここではリテラル初期化が使用されているため、性別属性が私に割り当てられても無意味であり、属性にアクセスすることはできません。
new キーワードを使用してプリミティブ値を初期化すると、JavaScript は Object インスタンスを作成します。例:

let me = new String("Sam");
me.sex = "男性";

console.log(me.sex); // "男性"

値のコピー

プリミティブ値と参照値は、変数を介してコピーされる場合にも異なります。プリミティブ値は新しい変数にコピーされますが、参照値は実際には値へのポインタをコピーします。例:

名前を "Sam" にします。
myName = 名前とします。

console.log(myName); // "サム"

myName が name に初期化されると、「Sam」も myName にコピーされますが、これは name とは独立しており、互いに干渉しません。myName は name のコピーであると理解できます。

参照値のコピーは、実際にはヒープ メモリ内のオブジェクトを指すポインターをコピーします。コピーされた変数に対する属性操作は、実際にはコピーされたオブジェクトに対する操作です。2 つの変数は実際には同じオブジェクトを参照します。例:

let me = new Object();
あなた=私になります。

me.name = "サム";

console.log(you.name); // "サム"

値の種類を決定する

変数の型を決定するために typeof をよく使用します。これはプリミティブ値の型を決定するのに便利ですが、参照値と null の場合、typeof はオブジェクトを返すため、参照値を決定するのにはあまり役立ちません。

通常、これがどのようなタイプのオブジェクトであるかを正確に知る必要があるため、instanceof 演算子を使用します。構文は次のとおりです。

結果 = 変数インスタンスコンストラクタ

instanceof はブール値を返します。例:

console.log(person オブジェクトのインスタンス);  
// 変数 person はオブジェクトですか?

console.log(色のインスタンス配列);   
// 変数 colors は配列ですか?

console.log(パターンインスタンスRegExp); 
// 変数パターンは正規表現ですか?

プリミティブ値に対して instanceof を使用すると、プリミティブ値はオブジェクトではないため、常に false が返されます。

要約する

ECMAScript におけるオリジナル値と参照値についての記事はこれで終了です。ECMAScript におけるオリジナル値と参照値についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去記事を検索するか、引き続き以下の関連記事を閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  Linux のリンク解除機能とファイルの削除方法

>>:  MySQLデータベースのbinlogクリーンアップコマンドの詳細な説明

推薦する

HTML テーブルタグチュートリアル (25): 垂直配置属性 VALIGN

垂直方向では、行の配置を上、中央、下に設定できます。基本的な構文<TR VALIGN=&quo...

ulとliの基本的な使用法の分析

ナビゲーション、少量のデータテーブル、中央揃え<!DOCTYPE html PUBLIC &q...

DockerにElasticsearch7.6クラスタをインストールしてパスワードを設定する方法

目次基本的な設定バージョンとDockerイメージについて始めるelasticsearch.ymlにつ...

ブートストラップ学習体験のまとめ - CSS スタイル デザイン共有

プロジェクトのニーズにより、ブートストラップ フレームワークを慎重に学習する予定です。以前から少しは...

グリッドはページのレイアウトプランです

<br /> 英語原文: http://desktoppub.about.com/od/...

Element-ui レイアウト (行と列コンポーネント) の実装

目次基本的な手順と使用方法行コンポーネントの分析レンダリング機能ソースコード分析Col成分の分析コン...

Docker コンテナのネットワーク障害に対する 6 つの解決策

Docker コンテナのネットワーク障害に対する 6 つの解決策注: 以下の方法は、コンテナ内のパブ...

Centos7 システムでの .NET Core 2.0 + Nginx + Supervisor 環境の構築

1. Linux .NET Core の紹介Microsoft は常に自社のプラットフォームに対して...

パーティショニングを使用して数十億のデータに対する MySQL データ処理を最適化する方法

MySQL が数千万のデータをクエリする場合、ほとんどのクエリ最適化の問題はインデックスを通じて解決...

Docker のホスト間コンテナ通信オーバーレイ実装プロセスの詳細な説明

サーバーも 2 つあります。準備:コンテナのホスト名を設定する consul: kv タイプのストレ...

MySQL フィールドで NOT NULL を使用する必要があるのはなぜですか?

私は最近新しい会社に入社したのですが、データベース設計にいくつか小さな問題があることに気付きました。...

Linux システムが VMware にインストールされているかどうかを確認する方法

現在の Linux システムが VMware にインストールされているかどうかを確認する方法を教えて...

MySQL でグループ化した後、各グループの最大値を取得する詳細な例

MySQL でグループ化した後、各グループの最大値を取得する詳細な例1. テストデータベーステーブル...

HTML チュートリアル: 順序なしリスト

<br />原文: http://andymao.com/andy/post/102.h...

ホストNginx + Docker WordPress Mysqlを設定するための詳細な手順

環境Linux 3.10.0-693.el7.x86_64 Docker バージョン 18.09.0...