ホームページ > 記事 > ウェブフロントエンド > JavaScript の高度なプログラミングの概要
前書き:
この本の半分を注意深く読むのに約 1 週間かかりました。以下は、この本を読んだ人に全体的な理解が得られることを願っています。に。現時点では少し乱雑で包括的ではないかもしれませんが、後で整理して追加します。 (2017-7-17)
構文
大文字と小文字を区別する
識別子(キャメルケースの使用を推奨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.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.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 サイトの他の関連記事を参照してください。