前書き:
この本の半分を注意深く読むのに約 1 週間かかりました。以下は、この本を読んだ人に全体的な理解が得られることを願っています。に。現時点では少し乱雑で包括的ではないかもしれませんが、後で整理して追加します。 (2017-7-17)
第 1 章JavaScriptはじめに
第 2 章 HTML で使用するJavaScript
第 3 章 基本概念
3.1.構文
大文字と小文字を区別する
識別子(キャメルケースの使用を推奨myCar)
コメント// /**/strict モード (strict を使用)
ステートメント var diff-a-b; にはセミコロン を使用し、 if( test ) {alert(test) } も使用することをお勧めします。 3.2 キーワードと予約語
3.3 変数未初期化
未定義 var message = “hi” message = 100;型は自由に変更可能
Function test(){ Var a = “hi”; 局部 b = “hi”; 全局 }
Test(); エラー alert(b); こんにちは
3.4データ型
typeof (定義されていますが割り当てられていません) ヌル ( Null オブジェクト ポインター
)Boolean(ブール値
true false フロー制御ステートメントは、対応するboolean変換)Number
(8進数
0 10進数 16進数0x 浮動小数点値の範囲NaN 数値変換Number parseInt )String(文字列、一重引用符と二重引用符の違いなし、エスケープシーケンス、文字列
toString String)Object(object すべてのオブジェクトの基礎
var o = new Object();)ESの
関数はデータ型ではなくオブジェクトです。
3.5演算子
単項演算子
++ --,+ -(データ型の変換に使用できます)
bit tor
ビットごとに押すnon-~num1 ビットごとの AND& ビットごとの OR| ビットごとの XOR^ 左シフト
右シフト> > 符号なし右シフト>>ブール演算子
! && || 乗算演算子* / % 加法演算子+ - 関係演算子 == != === !== 条件演算子? :
代入演算子 = *= /= %= += -= >= >>>=
カンマ演算子3.6 ステートメント
3.7関数
引数
オーバーロードなし
第4章変数、スコープ、メモリの問題
4.1基本的な型と参照 型の値動的属性 (参照型は属性を動的に追加できます
)
変数値をコピー (基本型は異なる空間であり、参照型は同じ空間を参照します)
パラメータを渡す (同じ)
Type Types y (Typeof Instanceof)
4.2
実行環境とアクション ドメイン
拡張ドメインチェーン (Try-Catch with) ブロックレベルのスコープなし (の場合) 変数クエリ識別子の宣言)
4.3ガベージコレクション
戦略(参照カウントをクリアにマーク) パフォーマンスの問題 メモリの管理
第5章 参照型
5.1 Objecttype
Var person = {};(関数に多数のパラメータを渡すのに適しています) var parson = new Object(); ["name"](
変数を使用して属性を表す場合はを使用してください) person.name(推奨)
5.2 Array
typeVar Colors = new配列(); var Colors = Array(); var Colors =[*****];
Colors[*] = *****; 配列を検出します:配列.isArray()
変換メソッド:toString() valueOf() toLocaleString() join()
スタックメソッド:
Push() Pop()
Queueメソッド:シフト() unshift()
並べ替え方法:
reverse() sort(比較関数のパラメータを追加できます
)
操作方法:concat()前と同じslice()元のインターセプトセグメント
splice()
変更された元のセグメントは削除または追加可能 Positionメソッド: indexOf() lastIndexOf() 項目の位置を返す
反復メソッド:
every() filter() forEach() map() some()各項目は処理されますが、元の配列は変更されません
Mergeメソッド:
reduce()順序reduceRight()逆順 2つの項目を最後までたどる
5.3 DateType New Date() Inside
parse(
"May 2 5,2004" ) UTC (2005,0) Date.now()
継承メソッド:
toLocaleString() toString() valueOf()日付書式設定メソッド:
toDateString() toTimeString() toLocaleDateString( ) toLocal eTimeString ( ) toUTCString()Date
/Timeコンポーネントメソッド: 特定の読み取りが多すぎます
5.4RegExp
type
リテラル
var pattern1 = / [bc]at /i ;
Constructor
var pattern2 = new RegExp(" [bc]at ", " i ");RegExpインスタンス属性
グローバルignoreCase lastIndex複数行ソース
役に立たない
RegExpインスタンスメソッド: exec() キャプチャグループ(一致するアイテムの複数のセットをキャプチャ) text() 一度に一致するかどうかを確認する
RegExpConストラクターの属性: 少し多すぎます。最新の一致の関連情報を表示するために使用されます
このモードの制限: 一部の言語(Perl)でサポートされている高度な正規表現機能が欠けていますが、十分ですほとんどの場合
5.5 Function型 Functionはオブジェクト(はFunctionのインスタンスでもある)であり、関数名はポインタである。
function sum(num1,num2) { }
Var sum = function(num1,num2){ };
オーバーロードはありません。関数はオブジェクトであり、関数名はポインタ。
関数宣言と関数式: function ******* 関数宣言の昇格 var sum = ******* は昇格されません
内部function 属性: argumentsobject(propertycalleeは関数を指す) thisobject(関数実行の環境オブジェクトを指す) 発信者 (現在の関数の呼び出しを指します。グローバル スコープの関数の場合、値は null)
関数の属性とメソッド:
Attributes
(length宣言された数パラメータ prototypeInherit )
非継承メソッド:call() apply() binding()
a.apply( b, c); d ); 環境内の
オブジェクトb 内の関数 a を実行し、 パラメータを a c (引数 または配列 ) / d ( write each item out )
Var a = b.bind(c);
a
はc環境オブジェクト で実行される関数です
5.6
基本的なパッケージ化タイプ:
Boolean
タイプ:var booleanObject = new Boolean(true); Boolean オブジェクトは決して使用しないことをお勧めします。
Number
Type:varnumberObject = new Number(10); toFixed() toExponential() toPrecision()
Number を直接インスタンス化しないこともお勧めしますタイプ。
String
Type:var stringObject = new String("hello world")Attribute
;1.文字メソッド: charAt() または string[] 対応する文字を返す charCodeAt() 対応する文字コードを返す
2. 文字列操作メソッド:
concat() または + 演算子は配列 concat()
Slice() substring() substr() インターセプト文字列、3 つは非常に柔軟です
3.文字列位置メソッド: indexOf() lastIndexOf()
4.trim()メソッド すべての接頭辞と接尾辞のスペースを削除します trimLeft() TrimRight()
5. 文字列の大文字と小文字の変換メソッド
toLowerCase() toUpperCase() 古典的なメソッド
toLocaleLowerCase() toLocaleUpperCase() 特定地域 こちらの方が信頼性が高い
6. 文字列パターン マッチングメソッド。
マッチ( ) は本質的に RegExp の exec() と同じで、一致した文字列の配列を返します
search() は最初に一致したインデックスを返します それ以外の場合は に戻ります-1
Replase ()
文字列を照合して置換Split ()
分割されたパーティションを照合して配列を生成7.localecompare
8.fromCharCode()静的メソッド 複数の文字エンコーディングを変換
9.HTMLメソッド 例: big() string
5.7 単一の組み込みオブジェクト
1.グローバル
オブジェクト
URLエンコード方法:
encodeURI()全体 encodeURIComponent()
特定の段落のエンコード
decodeURI( ) 全体 decodeURIComponent()
特定セクションのデコード
eval()メソッドは非常に強力で非常に危険ですECMAScript
parser
Globalオブジェクトのプロパティ未定義
、
配列…… はすべて属性です Webブラウザはwindow
オブジェクト
の一部としてグローバルオブジェクトを実装します2.Mathオブジェクト
Math
オブジェクトのプロパティ いくつかの特別な値π
min() max() など
メソッド丸めメソッド: 10進数値を整数に変換
Math.ceil(25) 1 つ追加 Math.floor(25) 1 つ返す Math.round(25) 丸め
random()メソッド [0,1 )間の乱数
その他のメソッド 読みすぎ
第6章 オブジェクト指向プログラミング
6.1オブジェクトを理解する
6.1。 1プロパティ タイプ:
データ プロパティ: 4 プロパティ
アクセス プロパティ: データ値は含まれません 4 Object.defineProperty() 経由のプロパティ定義
6.1.2複数のプロパティを定義します: Object.defineProperties() データ属性またはアクセサー属性にすることができます。
6.1.3プロパティを読み取るための特性: Object.getOwnPropertyDescriptor()
6.2オブジェクトの作成
6. 2. 1ファクトリーモード(読み取り )
6.2.2コンストラクターパターン(本を読む新しいコンストラクター)
6.2.3プロトタイプパターン:
1. プロトタイプオブジェクトを理解する
2.プロトタイプとin演算子( in for-in )
3.より単純なプロトタイプ構文(オブジェクトにアクセスするためのオブジェクトリテラル)
4.プロトタイプのダイナミクス( プロトタイプは別のオブジェクトに置き換えることができますが、すでに作成されたインスタンスには無効です)
5.ネイティブオブジェクトのプロトタイプ( プロトタイプモードを使用するだけですで新しいメソッドを定義できますが、お勧めできません)
6. プロトタイプオブジェクトの問題: インスタンス自体に属するプロパティがありません
6.2.4コンストラクターパターンを使用しますとプロトタイプ パターンの組み合わせ
最も一般的なパターンでは、インスタンスには独自のプロパティとメソッドがあり、一部は共有されます。
6.2.5動的プロトタイプモード
上記のモードに判定文を追加し、プロトタイプに動的にメソッドを追加します。
6.2.6 寄生コンストラクター パターン
とファクトリー パターンの違いは new が 1 つだけで、複数の return があります。返されたオブジェクトはコンストラクターとは何の関係もないため、instanceof 演算子を使用してオブジェクトの型を決定することはできません。お勧めしません。
6.2.7Sure コンストラクター パターン
は寄生コンストラクター パターンに似ていますが、this と new がありません。 インスタンスが検出できません
6.3
継承
6.3.1
プロトタイプチェーンプロトタイプ検索メカニズム
1
デフォルトのプロトタイプを忘れないでください: すべての関数デフォルトのプロトタイプはすべてObject のインスタンスです。
2.
プロトタイプとインスタンスの関係を決定します:instanceof isPrototypeOf()
3. メソッドを慎重に定義します: インスタンスがプロトタイプを置き換えた後に、新しいメソッドを定義する必要があります。
4. プロトタイプチェーンの問題:
プロトタイプの外側の属性も継承されます
サブタイプのインスタンスを作成するとき、パラメーターをスーパータイプのコンストラクターに渡すことができません。
単独で使用されることはほとんどありません。
6.3.2
コンストラクターを借用するcall または apply を使用してパラメーターを継承して渡します ただし、使用できるのはコンストラクター パターンのみです。
また、単独で使用されることはほとんどありません。
6.3.3
結合継承プロトタイプチェーンの実装
プロトタイプのプロパティとメソッドの継承
コンストラクターの実装の借用
インスタンスの継承プロパティ
最もよく使用される継承メソッド 6.3.4プロトタイプ継承
(Reading)
コンストラクターは使用されません
保存された型も使用できますが、プロトタイプパターンと同様に共有されます 参照型プロパティ。
6.3.5寄生継承
(Reading)
コンストラクターは考慮されません
使用可能 ただし関数の再利用は不可6.3. 6寄生結合継承(
Reading)結合継承には問題があります。スーパータイプのコンストラクターが 2 回呼び出され、インスタンスとプロトタイプに属性が重複します。 寄生結合継承はこの問題を解決し、最も理想的な継承パラダイムになります。
第7章関数式
関数の定義方法:( 関数宣言は
で昇格されます)名前 )
関数式(nameは空の匿名関数/
名前付き一般関数式は匿名関数
)
7.1再帰
厳密モードは使用できません argument.callee 名前付き関数式を使用できます。
7.2クロージャ: 別の関数のスコープ内の変数にアクセスできる関数
自己要約: クロージャは関数であり、通常は匿名関数です
1。クロージャ 返された外部関数内の変数にアクセスできます。
2. 別の関数のアクティブなオブジェクトは、クロージャのスコープ チェーンが破棄されるまで保存されます。
7.2.1クロージャと変数
副作用: 変数オブジェクト全体がクロージャのスコープチェーンに保存されるため、返される変数は最後に保存された値になります。
例えば、forループでは、満足できない状況が発生します。
7.2.2 クロージャ内の this オブジェクト
this オブジェクトに関して、いくつかの特殊なケースでは、クロージャはグローバル オブジェクトに配置されることがあります。 知らないうちに変わる。
7.2.3
メモリリーク
通常のメモリリサイクルを保証するためにクロージャを使用する
7.3
ブロックレベルのスコープを模倣する
匿名の自己を使用する-模倣する関数を実行します。
自己要約関数:
1.
内部実行後に破棄されます。
2.
匿名の自己実行関数により、グローバル メソッドとプロパティの汚染を軽減できます。
クロージャにはメモリの問題がありますが、この組み合わせを使用するのは非常に快適です。
7.4
プライベート変数オブジェクト上のすべてがパブリックです
関数内のすべてがプライベートです
クロージャを通じて関数のパブリック メソッドを作成します(特権メソッド ) ---------プライベート変数の取得に使用
コンストラクター内で作成メモリ例: this.****** = function() {**** };
しかし、インスタンス化のたびにメソッドのセットが再構築されるため、無駄が生じます。7.4.1
静的プライベート変数プライベート スコープ
グローバル コンストラクターのプロトタイプで囲んで特権メソッドを作成します。
コードの再利用性が向上しますが、各インスタンスには独自のプライベート変数がありません。 (これは静的プライベート変数と呼ばれるため)
特定のニーズに応じて、インスタンス変数または静的プライベート変数を使用します。
7.4.2モジュールパターン( 単一のケース: インスタンスが 1 つだけあるオブジェクト)
匿名関数内でプライベート変数とメソッドを定義し、オブジェクト リテラルを関数の戻り値。 7.4.3
拡張モジュールモード
は特定の型のインスタンスである必要があり、いくつかのプロパティまたはメソッドを追加する必要があります。
以上がJavaScript の高度なプログラミングの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

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リクエストがロールベースに付着することを保証します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

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

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

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
