この記事では、JavaScript で渡す値と参照の違いについて詳しく説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。
JavaScript では、値および参照によって渡すことができます。 2 つの主な違いは、値渡しはプリミティブ型を割り当てるときに発生するのに対し、参照渡しはオブジェクトを割り当てるときに発生することです。以下を詳しく見てみましょう。
1. 基本的な型とオブジェクトを理解する
JavaScript には、基本的な型とオブジェクトという 2 つのデータ型が用意されています。
基本的な型は、number
、boolean
、string
、symbol
、null
、 # ##未定義###。 <pre class='brush:php;toolbar:false;'>// 基本类型
const number = 10;
const bool = false;
const str = &#39;Hello!&#39;;
const missingObject = null;
const nothing = undefined;</pre>
2 番目のカテゴリはオブジェクトです。通常のオブジェクト、配列、関数などはすべてオブジェクトです。
// Objects const plainObject = { prop: 'Value' }; const array = [1, 5, 6]; const functionObject = (n1, n2) => { return n1 + n2; };
言い換えると、プリミティブ型ではない値はすべてオブジェクトです。
2. 値渡し値渡しの単純なルールは、JS のすべての基本型が値によって渡されるというもので、非常に単純です。
値による受け渡しとは、値が変数に代入されるたびに、値のコピーが毎回作成されることを意味します。
例として、2 つの変数
と b
があるとします。 <pre class='brush:php;toolbar:false;'>let a = 1;
let b = a;
b = b + 2;
console.log(a); // 1
console.log(b); // 3</pre>
最初のステートメントは変数
を宣言し、その値を 1
に割り当てます。 2 番目のステートメントは、変数
を宣言し、値 a
をそれに割り当てます。 最後に、
は 2 増加して 3
となります。 b
変数は変更されますが、その変更は a
の値には影響しません。
参照渡しの方法は、値渡しとは異なります。
オブジェクトが作成されると、そのオブジェクトへの参照が取得されます。 2 つの変数が同じ参照を保持している場合、オブジェクトへの変更は両方の変数に反映されます。
次のコードを見てください:
let y = x; y.push(2); console.log(x); // [1, 2] console.log(y); // [1, 2]
最初のステートメント
let x =[1]Create配列、変数 #xx を定義し、作成された配列への参照を使用して変数を初期化します。
次に、
y = x
y を定義し、
x 変数に格納されている参照を使用して
y を初期化します。は参照渡しです。
y
y.push(2) を通じて配列を変更します。
x 変数と
y 変数は同じ配列を参照するため、この変更は両方の変数に反映されます。
注: 簡単にするために、変数にはオブジェクトへの参照が含まれていると言います。しかし、厳密に言えば、JavaScript の変数に含まれる値はオブジェクトへの参照です。
JavaScript 上級チュートリアル
]オブジェクトの比較において値と参照の違いを理解することが重要です。
厳密比較演算子===
を使用する場合、値が同じであれば 2 つの変数は等しいと見なされます。以下のすべての比較は等しく、const one = 1; const oneCopy = 1; console.log(one === oneCopy); // true console.log(one === 1); // true console.log(one === one); // true
one と oneCopy は同じ値
1 を持ちます。両方のオペランドが
1 の場合、演算子
=== は
true と評価されます。
ただし、参照を比較する場合、比較演算子
===
ar1
ar2 は、異なる配列インスタンスへの参照を保持します:
const ar1 = [1]; const ar2 = [1]; console.log(ar1 === ar2); // false console.log(ar1 === [1]); // false const ar11 = ar1; console.log(ar1 === ar11); // true console.log(ar1 === ar1); // true
ar1 および ar2同じ構造の配列を参照しますが、
ar1 と
ar2 が参照しているため、
ar1 === ar2 の計算結果は
false になります。別の配列オブジェクトに。
比較演算子は、同じオブジェクトを指す参照を比較する場合にのみ
true
ar1 === ar11 または
ar1 === ar1 。
5. 概要
JavaScript では、プリミティブ型は値として渡されます。つまり、値が割り当てられるたびに、その値のコピーが作成されます。
一方、オブジェクト (通常のオブジェクト、配列、関数、クラス インスタンスを含む) は参照です。オブジェクトが変更されると、それを参照するすべての変数に変更が反映されます。 比較演算子は、比較値と参照を区別します。参照を保持する 2 つの変数は、まったく同じオブジェクトを参照している場合にのみ等しいですが、値を保持する 2 つの変数は、変数が同じ 2 つの値 (変数、リテラルなどから) を持つ限り、等しくなります。値がどこから来たかに関係なく、変数は等しいです。元のアドレス: https://dmitripavlutin.com/value-vs-reference-javascript/
著者: Ahmad shaded翻訳アドレス: https:/ /segmentfault.com/a/1190000039761445
プログラミング関連の知識について詳しくは、プログラミング教育をご覧ください。 !
以上がJSにおける値の受け渡しと参照の受け渡しの違いを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

WebStorm Mac版
便利なJavaScript開発ツール

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