エラーが発生しやすい JavaScript に関する一般的な知識ポイントをまとめたもの
1. 変数スコープ
var a = 1; function test() { var a = 2; console.log(a); // 2 } test();
A は上記の関数スコープで宣言および代入されており、コンソールの上にあるため、出力 a は近接原理に従って 2 に等しくなります。
var a = 1; function test2() { console.log(a); // undefined var a = 2; } test2();
上記の関数スコープ内でaが宣言されて代入されていますが、コンソール配下にあり、a変数は宣言されているものの出力時に値が代入されていないため「未定義」と出力されます。
var a = 1; function test3() { console.log(a); // 1 a = 2; } test3();
上記の関数スコープの A は再宣言ではなく再代入され、コンソール配下にあるため、グローバルスコープの a が出力されます。
let b = 1; function test4() { console.log(b); // b is not defined let b = 2; } test4();
ES6 let は上記の関数スコープで変数 b を再宣言するために使用されますが、var とは異なり、let には変数を昇格する機能がないため、「b が定義されていません」という出力エラーが報告されます。
function test5() { let a = 1; { let a = 2; } console.log(a); // 1 } test5();
上記の関数スコープは let を使用して a を 1 として宣言し、ブロックレベルのスコープで a を 2 として宣言しています。コンソールは関数内のブロックレベルのスコープにないため、1 が出力されます。
2. 型の比較
var arr = [], arr2 = [1]; console.log(arr === arr2); // false
上記の 2 つの異なる配列を比較します。コンソールは false です。
var arr = [], arr2 = []; console.log(arr === arr2); // false
上記の 2 つの同一の配列を比較します。2 つの別々の配列は決して等しくないため、コンソールは false になります。
var arr = [], arr2 = {}; console.log(typeof(arr) === typeof(arr2)); // true
上記は typeof を使用して配列とオブジェクトを比較しています。typeof は NULL、配列、オブジェクトを取得するため、型はすべてオブジェクトであるため、コンソールは true になります。
var arr = []; console.log(arr instanceof Object); // true console.log(arr instanceof Array); // true
上記では、instanceof を使用して、変数がオブジェクトのインスタンスに属しているかどうかを判断しています。配列も JavaScript のオブジェクトの一種であるため、どちらのコンソールも当てはまります。
3.thisは
var obj = { name: 'xiaoming', getName: function () { return this.name } }; console.log(obj.getName()); // 'xiaoming'
を指します。上記のオブジェクトメソッドのThisはオブジェクト自体を指しているので、「xiaoming」が出力されます。
var obj = { myName: 'xiaoming', getName: function () { return this.myName } }; var nameFn = obj.getName; console.log(nameFn()); // undefined
オブジェクト内のメソッドは上記の変数に割り当てられます。この時点で、メソッド内の this は obj オブジェクトを指すのではなく、window オブジェクトを指すことになるため、コンソールは「未定義」になります。
var obj = { myName: 'xiaoming', getName: function () { return this.myName } }; var obj2 = { myName: 'xiaohua' }; var nameFn = obj.getName; console.log(nameFn.apply(obj2)); // 'xiaohua'
obj オブジェクトのメソッドは上記の変数 nameFn にも代入されていますが、これは apply メソッドを通じて obj2 オブジェクトを指しているため、最終的なコンソールは 'xiaohua' になります。
4. 関数パラメータ
function test6() { console.log(arguments); // [1, 2] } test6(1, 2);
上記は関数内の引数オブジェクトを使用して、関数に渡されるパラメータ配列を取得するため、出力配列は [1, 2] になります。
function test7 () { return function () { console.log(arguments); // 未执行到此,无输出 } } test7(1, 2);
上記でもパラメータを取得するために引数を使用していますが、test7(1, 2) は戻り値として関数を実行しないため、test7(1, 2)(3, 4) が実行された場合、出力はありません。 ,4]が出力されます。
var args = [1, 2]; function test9() { console.log(arguments); // [1, 2, 3, 4] } Array.prototype.push.call(args, 3, 4); test9(...args);
上記は Array.prototype.push.call() メソッドを使用して 3 と 4 を args 配列に挿入し、ES6 拡張演算子 (...) を使用して配列を展開して test9 に渡します。コンソールは[1、2、3、4]です。
5. クロージャの問題
var elem = document.getElementsByTagName('div'); // 如果页面上有5个div for(var i = 0; i < elem.length; i++) { elem[i].onclick = function () { alert(i); // 总是5 }; }
上記は、クリック イベントをトリガーしたときに i の値がすでに 5 であるため、div をクリックしたときに表示される値は常に 5 になる、非常に一般的なクロージャの問題です。次のメソッドを使用できます。 解決策:
var elem = document.getElementsByTagName('div'); // 如果页面上有5个div for(var i = 0; i < elem.length; i++) { (function (w) { elem[w].onclick = function () { alert(w); // 依次为0,1,2,3,4 }; })(i); }
バインドされたクリック イベントの外側で即時実行関数をカプセル化し、関数に i を渡します。
6. オブジェクトのコピーと代入
var obj = { name: 'xiaoming', age: 23 }; var newObj = obj; newObj.name = 'xiaohua'; console.log(obj.name); // 'xiaohua' console.log(newObj.name); // 'xiaohua'
上記では、obj オブジェクトを newObj オブジェクトに代入して、newObj の name 属性を変更しましたが、これは、obj オブジェクトの name 属性も改ざんされているためです。実際に取得されたオブジェクト これは単なるメモリアドレスであり、実際のコピーではないため、obj オブジェクトは改ざんされます。
var obj2 = { name: 'xiaoming', age: 23 }; var newObj2 = Object.assign({}, obj2, {color: 'blue'}); newObj2.name = 'xiaohua'; console.log(obj2.name); // 'xiaoming' console.log(newObj2.name); // 'xiaohua' console.log(newObj2.color); // 'blue'
上記の Object.assign() メソッドを使用してオブジェクトのディープ コピーを実行すると、ソース オブジェクトが改ざんされる可能性を回避できます。 Object.assign() メソッドは、ソース オブジェクト自体の列挙可能なプロパティを任意の数でターゲット オブジェクトにコピーし、ターゲット オブジェクトを返すことができるためです。
var obj3 = { name: 'xiaoming', age: 23 }; var newObj3 = Object.create(obj3); newObj3.name = 'xiaohua'; console.log(obj3.name); // 'xiaoming' console.log(newObj3.name); // 'xiaohua'
Object.create() メソッドを使用してオブジェクトをコピーすることもできます。Object.create() メソッドは、指定されたプロトタイプ オブジェクトとプロパティを使用して新しいオブジェクトを作成できます。
結論
JavaScriptの学習は長いプロセスであり、一夜にして達成できるものではありません。この記事で紹介したポイントが、JavaScript を学習している学生の皆さんが JavaScript 構文をより深く理解して習得し、寄り道を避けるのに役立つことを願っています。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の 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 テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

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

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

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

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

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