JavaScript_javascript のわかりにくい変数割り当ての分析のヒント
JavaScript は型指定が弱い言語です。変数を宣言するとき、Var x はどの型の値でも宣言する必要はありません。
例:
var str = "string....";
var arr = ["this","is","array"];
var obj = { name :"caizhongqi",age:26,sex:"male"};
これらは非常にシンプルで便利に思えますが、この便利さはいくつかのとらえどころのない驚きももたらします。以下の例を見てください。 ):
アラートが「これは文字列です」として出てくることはすぐにわかるかもしれませんが、Java 言語を使用するプログラマーの場合は、var y=x を割り当てる必要があります。メモリ内の x のアドレス (ポインタ) を y 変数に代入するため、「ニーハオ」という警告は Java 言語の習慣により一致するはずだと考えられていますが、JavaScript 言語ではそうではありません。文字列の割り当ては直接行われます。操作では、データを y の記憶領域に直接コピーします。
次の例 (例 2) を見てください。
アラートが「こんにちは」と出てきたと思ったら、それは間違いです。 var y = x のとき、x はすでにその配列を y に渡しているのではないでしょうか?しかし、実際にはそうではありません。var y = x の場合、x はメモリ内のアドレス (ポインタ) を渡します。 x[0]="world" は元の保存場所のデータを変更するため、alert(y[0]) は x の新しい値を使用して警告します。混乱した?一度に直接測定し、直接見積もられるのはなぜですか?
心配しないでください。次の例はさらに混乱します (例 3):
あなたの目からは、アラートが「こんにちは」と出ていることがわかります。これはとても予測不可能で奇妙な JavaScript です。
スティーブン・チョウの「国内ゼロペイント」にも同様のシーンがあります。
シン氏が任務で深センから香港に到着したばかりのとき、アニタ・ユエンは荷物の中にヘアドライヤーを見つけました、と私は言いました。本当はヒゲ剃りだったのですが、革靴を脱ぐとドライヤーで、携帯電話に見えるのはヒゲ剃りでした。シェーバーとヘアドライヤーはアニタ・ユエンと観客を混乱させました、はははは、これは私のお気に入りの映画の一つです、初めて見たときはお腹が痛かったです。
今の変数の割り当てを振り返ると、直接量と参照量の使用は、シェーバーとヘアドライヤーを交換するようなもので、全員がめまいを感じました。
実際、問題は x = ["ni", "hao"] の 2 番目の代入にあります。メモリ内の変更と、JavaScript による文字列型とオブジェクト型の処理の違いを見てみましょう。 🎜 >
次の 2 つの状況が観察されます:
var x = "this is string...";
var y = ["this","is","string"];
x と y の違いは型にあります。JavaScript パーサーは文字列値 (実際にはコピー) を x (直接量) に割り当てますが、配列ポインタは y (参照量) に割り当てられます。全自動!次の図と組み合わせると、よりよく理解できるかもしれません:
図では、p1、p2... は変数へのポインターであり、上記の var y の y はオブジェクト型を格納します。ポインタ p1 (仮定)、および x には文字列自体が格納されます。例 3 を再度分析してください。var ni","hao"] を実行すると、パーサーはこの新しい配列を保持するための新しい記憶領域を開きます。x はこの新しい記憶領域のポインタです。これは、再定義 (または再割り当て) を意味します。 JavaScript の変数は、元のスペースを破壊せずに新しいストレージ スペースを作成します。例 2 を見てください。x[0] = "world"、この文は x の新しい値を定義せず、新しいストレージ スペースを作成しません。ただし、変更されるのはそのストレージのデータだけです。したがって、例 2 の最後のアラートは「world」です。例 1 は文字列の代入であり、プロセス全体が直接操作です。
上記の分析からわかるように、JavaScript 変数は直接の量やポインタを格納できます。したがって、日常のコーディングでは、次のような問題に注意する必要があります。ループ内の大きな文字列の連結と代入は、プログラムの実行効率に直接影響を与える可能性があるためです。
2 つの例を見てください:
var _tmpStr="";
var str = "これは大きな文字列です..."; 100; i ){ _tmpStr = a;
}
a = _tmpStr;
これは直接量を使用する文字列演算であるため、各ループは非常に大きな文字列を演算する必要があります。そして非効率的です。代わりに参照操作を使用する場合、つまり配列を使用する場合:
var str = "これは大きな文字列です...";
var _tmpArray = []
for (i=0; i _tmpArray[i]=str;
}
100k の文字列がある場合はテストを実行します, 私のマシンでは直接接続の操作に約 2600 ミリ秒かかりますが、アレイ接続を使用すると 150 ミリ秒かかります。効率は 10 倍以上異なります。
こんなに長い記事を書くのは久しぶりでした。一日のほとんどを費やしてしまいました。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
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 テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

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

タイトル: DreamWeaver CMS のセカンダリディレクトリを開けない原因と解決策の分析 Dreamweaver CMS (DedeCMS) は、さまざまな Web サイトの構築に広く使用されている強力なオープンソースのコンテンツ管理システムです。ただし、Web サイトの構築中に、セカンダリ ディレクトリを開けない状況が発生し、Web サイトの通常の動作に問題が発生することがあります。この記事では、セカンダリ ディレクトリを開けない考えられる理由を分析し、この問題を解決するための具体的なコード例を示します。 1. 考えられる原因分析: 疑似静的ルール構成の問題: 使用中

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが

タイトル: テンセントの主要なプログラミング言語は Go ですか: 詳細な分析 中国の大手テクノロジー企業として、テンセントはプログラミング言語の選択において常に多くの注目を集めてきました。近年、テンセントは主に Go を主要なプログラミング言語として採用していると考える人もいます。この記事では、Tencent の主要なプログラミング言語が Go であるかどうかについて詳細な分析を行い、この見解を裏付ける具体的なコード例を示します。 1. Tencent における Go 言語の適用 Go は、Google によって開発されたオープンソースのプログラミング言語であり、その効率性、同時実行性、シンプルさにより多くの開発者に愛されています。

静的測位技術の利点と限界の分析 現代の科学技術の発展に伴い、測位技術は私たちの生活に欠かせないものになりました。その 1 つとして、静的測位テクノロジには独自の利点と制限があります。この記事では、静的測位技術の詳細な分析を実施して、現在の応用状況と将来の開発傾向をより深く理解します。まず、静的測位技術の利点を見てみましょう。静的測位技術は、位置決め対象の物体を観察、測定、計算することで位置情報を決定します。他の測位技術と比較して、
