ホームページ > 記事 > ウェブフロントエンド > JavaScriptのメモ
day01
am:
フロントエンドの 3 つの基本知識:
HTML: Web ページのコンテンツの作成に特化
CSS: Web ページのスタイルのデザインに特化
JavaScript : Web ページのインタラクション言語の設計に特化
インタラクション: データを入力し、プログラムがデータを処理し、結果を返す
JavaScript とは:
1. Web ページのインタラクションのために特別に設計された言語
2. JavaScript インタプリタで実行します
3、「説明」の実行 - 本を読むようなもの
4. インターネット上で最大の言語: JSer
Brandon Edge: 4 つの言語を組み合わせたもの - JavaScript
ECMAScript 標準 : JavaScript コア構文
Microsoft: JScript
ECMAScript 標準: 1 枚の紙
JavaScript と JScript はどちらも ECMAScript 標準を完全に実装すると主張しています
W3C: DOM 標準: a HTML 要素、CSS スタイル、イベントを具体的に操作するための統一標準です。
BOM: ブラウザウィンドウの操作専用のツール。
標準は存在せず、ブラウザの製造元によって実装されます
JavaScript=ECMAScript DOM BOM
Mozilla Foundation——>Firefox
JSer の最大の課題: ブラウザの互換性の問題
JavaScript の一般的な使用法:
1. クライアント側のデータ計算
3. アニメーション
使用方法:
1. ブラウザーに付属の JS インタープリターを使用します:
F12——> カーソル位置にスクリプト コードを記述します。 Enterを押して実行します。
コンソール: コンソールを指します。プログラムの出力結果をデバッグするための専用のウィンドウです。
log: コンソールによって提供される機能: コンソールにログの行を出力します。
複数行:shift enter——>改行
** JavaScript では大文字と小文字が区別されます。 **
**文字列には一重引用符と二重引用符を使用できます**
2. 特別なインタープリタ ソフトウェアを別途インストールします:node.js Chrome V8
win R——>cmd——>node
終了: Ctrl c を 2 回
.js ファイルを実行します: 1. 最初に .js ファイルのパスに移動します
2. ノード ファイル名を入力します
3. Web ページを実行します:
参照 このツールには 2 つのツールが含まれています:
植字エンジン: 特に HTML コンテンツと CSS スタイルを読み込みます
解釈エンジン: 特に js スクリプトを実行します
<script> 要素: 特に js スクリプト ブロックの要素が含まれます <br> <script> の解釈と実行には js 構文を使用する必要があります。 <br>HTML要素のイベント「属性」内: <br>イベントとは何ですか?要素は、さまざまなマウスまたはキーボード操作に基づいて、さまざまなインタラクティブな動作に応答できます。 <br>文字セットはファイルのストレージ エンコーディングと一致している必要があります<br><script> 解釈して実行し、読み取って実行します。最初に読み取り、最初に実行します。 ——<script>配置の順序はプログラムの結果に影響します<br>。 <br>最適化: 本体の最後に配置します <br><br> 一度定義するとどこでも使用でき、一度変更するとどこでも有効になります。 </p>解決策: 繰り返し書かれたコード ブロックはメソッドにカプセル化する必要があります。<p>メソッド: 特殊な機能を実行する一連のコード。 <br>一般的に <br> の下の <script> で定義されています。 構文: 関数メソッド名 () {再利用されたコード ブロック} <br/>*調整されていない場合は実行されません*<br/><br/>デバッグ: バグ? デバッグ: 問題を解決し、エラーを排除します</p>応答がない、または効果がない限り、それはエラーです。 ——>F12</p>
<p>エラーの原因を表示——>間違った場所を見つけてください! <br><script>スクリプト ブロック内のエラーは、「現在のスクリプト ブロック」の「エラー位置以降」のスクリプトの実行にのみ影響します。 <br><script> 以外の他の要素の読み込みやスクリプトの実行には影響しません。 <br/>関数のエラー: メソッドが呼び出された場合にのみトリガーされます。 <br/><br/>ページ内部スクリプト ブロックの問題: 現在のページでのみ利用可能です。 </script>
.js ファイルとは: 特に js スクリプトのソース コードを保存するファイルです。
ソースコードを実行するには、js インタープリターに入れる必要があります。
.js ファイルの使用方法?ステップ 2: 1. .js ファイルを作成し、ソース コードを記述します。 2. 外部 .js ファイル
を同じ名前の内部メソッドと外部メソッドを持つページに導入し、説明して実行します。
pm:
ウィンドウの操作)
ECMAScript (コア構文)
*文字列は引用符 (一重または二重) で囲む必要があります*
*各ステートメントの最後にはセミコロンを推奨します*
ステートメント: プログラムで次のことが可能になりますone thing 1 行のコマンド
プログラム: コンピューターが人間のアイデアの実行をシミュレートできるようにします。
コメント: 解釈、実行、または表示されないコードの説明 - プログラマー向けの
コメントも Web トラフィックを考慮します。実稼働環境を削除する必要があります。
HTML コメント:
CSS コメント: /**/
JS コメント: //単一行のコメント /*複数行のコメント*/
*変数*
メモリ内で実行されるプログラム
任意のプログラム: IPO: 入力 プロセス 出力
データ データ データ
変数をいつ使用するか?プログラム内で一時的にデータを保存する限り、データは変数に入れる必要があります
変数の使い方は?宣言、名前付け、初期化、使用
宣言: メモリ内の記憶域を開き、名前を付けます
宣言方法は? var 変数名;
代入: 等号の右側のデータを等号の左側の変数にロードします!
値が割り当てられていない場合: js のデフォルトの割り当ては未定義です
命名規則: 名前を見て意味を知る
予約語やキーワードを変数名として使用することはできません
予約語: 特別な意味を持つキーワードが既に js に占有されている
使用方法: 変数名を使用することは同等です変数を直接使用する
に保存されたデータ: 複数の段落のテキストを 1 つの文につなぎます。
定数: 一度作成すると値を変更できない特殊な変数
定数の使用方法: const 定数名 = 定数値;
強調: 新しい値を格納できるのは等号のみです変数に変換します。通常の操作では変数の値は変更されません。変数の
値を使用するだけです。
var が含まれている限り、それは宣言です。宣言が行われている限り、メモリ空間が解放されます。
js 内の同じ名前の新しい変数の空間は、古い変数を置き換えます。空間。
複数の変数を使用すると、複数のストレージ スペースが作成されます。
データ型: 変数に格納されるデータ型。
js は弱く型指定されています。変数自体には型がありません。変数内の値のみが型を持ちます。
変数は、異なる種類のデータを繰り返し保存できます。
データ型がある理由: 実際には、すべてのデータはさまざまな用途に応じてさまざまなデータ型に分割されます。
プリミティブ型: データは変数にローカルに保存されます。
数値タイプ: 比較または数学的計算に使用されるすべての数値を表します
プログラム内の数値は、整数と浮動小数点数 (実際には 10 進数) に分けられます
js 内のすべての数値は、形式に関係なく、数値で保存されます整数型と小数型
数値型を定義するには?引用符なしの数値リテラル
プログラム内の数値型の丸め誤差:
1/3 が実際には正確に表現できないのと同様、プログラム内で 1/10 を正確に表現することはできません。
修正方法: 指定された桁数に丸めます:number.toFixed (小数点以下の桁数)
今後の計算結果の小数点以下の桁数が長すぎるため、丸めエラーが発生したことを示します。ビットごとに丸めます。
精度の計算には JavaScript を使用しないでください
文字列型: 文字のシーケンス!
Unicode: すべての言語の数字文字
なぜ「コンピューターは数字だけを処理し、テキストを処理できないからです。
コンピューターが Unicode 数字を処理することは、その文字に対応するテキストを処理することと同じです。」
エスケープ文字の転送: 特に非印刷文字と特殊記号を表します。
エスケープ文字の使用方法: n 改行、t タブ キーなどの特殊記号
文字列に競合する特殊文字が含まれている場合。文法では、変換を使用します。 元のテキスト
* 文字列変数の内容が作成されると、新しい文字列のみが作成され、古い文字列は破棄されます。 *
「こんにちは」という軽蔑的な質問です。 ;
str = str "Word";
3!
ブール型: true、false の 2 つの値のみを持つ特殊なデータ型
未定義型を使用します。これは、変数が宣言されただけで値が割り当てられていないことを意味します。割り当てられていないすべての変数のデフォルト値は
元の型のサイズ:
数値: 整数の場合は 4 バイト、浮動小数点の場合は 8 バイト
day02
JavaScript: ECMAScript (コア構文)
DOM (Web コンテンツの操作)
BOM (ブラウザー ウィンドウの操作)
ECMAScript: 標準
Netscapt : JavaScript Microsoft: JScript
変数: データを保存するメモリ内のスペース
すべてのデータは変数に保存する必要があります
割り当て: 変数名 = 値—> 後で使用できるように、値を左側の変数スペースに保存します
使用法: 変数名の使用は、変数内のデータを直接使用することと同じです
データ型:
理由: 記憶域のサイズと目的
数値 文字列 ブール値 未定義 null
文字列: 文字列の内容は作成後に変更できません
var str = "Hello";
3!
主なレッスン:
データ型間の変換:
弱い型: 1. 変数宣言でデータ型を制限する必要がなく、将来的には任意のデータ型を保存できます
2. データ型間の自動型変換が可能
考慮する必要があるのは、文字列が含まれる限り、すべてです。型に "" を追加して文字列になります
文字列がない場合は、数値計算に変換されます: true——>1 false——> 0
強制変換: プログラマーが特に関数を呼び出し、手動変換タイプ
2 文字列: x.toString();——> x を文字列型に変換します
string——>number:
整数に変換します: var num = parseInt("str");
文字列の整数部分を読み取ります
1. 最初の文字から逆方向に読みます。
2. 最初の数字に遭遇したら、数字の取得を開始します。再び数字ではない文字に遭遇した場合は、読み取りを停止します。
3. 先頭にスペースがある場合は、
4 を無視します。最初に見つかったスペース以外の文字が数値でない場合は、変換できないことを意味します—>NaN:
数値ではありません
NaN とは: 数値 (型)それは数値 (内容) ではありません
変換 浮動小数点数の場合: var num = parseFloat("str");
使用法は parseInt とまったく同じです
唯一の違い: parseFloat は小数点を認識します
プロンプト (「プロンプト情報」): ユーザーにデータの入力とデータの収集を要求するために特別に使用されるダイアログ ボックス。
var str = prompt("プロンプト情報");
※ページから取得するデータは全て文字列です!最初に変換してから計算する必要があります *
演算子とは: 人間の操作をシミュレートするためにプログラムで使用される特殊な記号
算術演算: -何らかの型を実行すると、- に変換されます。データ型
パラメータがある場合、数値に自動的に変換できず、NaN を返します
約数が 0 の場合: 無限大—>無限大
typeof(x): 任意のデータの型を決定します
Divisor % Divisor—モジュラー演算: 被除数/除数、除算できない剰余の削除
使用する場合: 特定の最大範囲を超えないように数値を制限する場合
インクリメント/デクリメント演算: i ==> i = i 1;
i を単独で使用します: 前後に配置しても効果は同じです: i ==>
i は式の中にあります:
の前最初の 1、次に
の後の式に参加し、最初に古い値を使用して式に参加します。式の後に、1
関係演算: サイズを決定します。条件判定で
を使用します。 結果: true: true、not true: false 🎜>"Hello" H e(101)
"Hi" H i(105)
関係演算時: 比較される任意の型数値を数値に変換して比較します
ブール型は関係演算に参加し、常に数値比較に変換します
PM:
関係演算: 判定に関与するデータが強制的に比較されるようになりました
未定義は == 比較を行います:
未定義の型、null 型から継承された
未定義の値は自動的に null に変換されます。 = null ——>true
=== 厳密な等価性: 自動型変換なし 等しい比較!
型と値は両方とも等しい必要があります。その場合にのみ true を返します。
厳密な等価性は、元々は未定義と null 用に設計されました
比較の型が不明で、自動型変換を望まない限り、===
NaN ==: isNaN(x): データが NaN であるかどうかを判断するために特に使用されます
NaN の場合は true を返し、NaN でない場合は false を返します
Yes
可能な限り数値に自動的に変換されるものは false を返します
関係演算では "" は false または 0 に自動的に変換できます
要約: 1 . 通常のデータ、最初に同じ型に変換してから比較
2. 未定義、===
3 を使用、NaN、isNaN(x)
を使用 論理演算: に基づく複数の関係演算セットから結論を導き出します
&&: および
||: または
! :いいえ、真偽を反転します。今後は判定結果を反転するときに使用してください。
短絡ロジック: 前の判断が最終結論に達するのに十分である限り、後続の条件は実行されません。
漢字かどうかの確認: >="u4E00" && <="u9FA5"
うるう年の判定式: (年 % 4 == 0 && 年 % 100 != 0 ) || (年 % 400 == 0)
変位: n <
代入演算: 代入演算の結果は等号の右側の式の結果です
使用する場合: 元の変数値を変更します
Sanmu: 少なくとも 3 つの式が必要です。
構文:
条件。2 つのうちの 1 つを選択します: 条件?条件が満たされた場合に返される値: 条件が満たされない場合に返される値
条件 1?条件 1 が満たされた場合の値:
条件 2?条件 2 が満たされた場合の値:
条件 n?条件 n が満たされた場合の値:
デフォルト値;
要件 1: 2 つの数値のうち最大のものを取得します
var core2 = 80; ; スコア 2 ? スコア 1 : スコア 2;
注: 後者の条件には、前の条件を否定する関係性の判断が含まれる必要はありません。
後者の条件に入る暗黙の条件は、前の条件が満たされていないことであるためです。 " Hello";
str > 10? str > 10000? false
NaN NaN
関係演算では、文字列が数値に変換されます。
注: 論理演算では、最初の条件の後で /-- を急いで抽出しないでください。
変数の間違った使用: *宣言されていない変数は、使用されている限りエラーが発生します。 *
console.log(Name);//プログラム実行エラー エラー!プログラムが停止します
console.log(name);//unknown1
関数 (メソッド): 特殊なタスクを実行するためのステップをカプセル化する一連のコード
メソッドはいつ定義されますか?コードの一部が再利用されていることが判明した限り、そのコードはメソッド
にカプセル化されます。 構文: 宣言
function メソッド名 (パラメーター リスト) {
メソッド本体: ステップ リスト
return 戻り値;
}
呼び出し: メソッド名 (パラメーター値リスト);
パラメーター: メソッド内の固有の変数。受信データを受信し、メソッド内で処理します。パラメータによりメソッドが柔軟になります。
メソッドのパラメータを宣言する方法: var なし!
パラメータはいつ作成されますか?
は、メソッドが呼び出されたときにのみ自動的に作成されます。 戻り値: メソッドの実行が完了すると、メソッド
によって返されるデータによって戻り値が定義されます。変数を宣言する必要はなく、戻り値を直接使用します。
戻り値を定義する理由: メソッドを呼び出す人が明確な戻り結果を必要とするためです。
戻り値は主に呼び出し元によって使用されます。
return: 意図した終了メソッド!
終了と同時にデータも返却可能!
必要に応じてメソッドを呼び出して戻り値を実行できます。
戻り値のあるメソッドを使用する場合、戻り値データを直接使用するのと同じです。
スコープ: 変数の利用可能な範囲!
グローバル スコープ: グローバル スコープに直接配置された変数は、グローバル変数と呼ばれます。
すべてのスコープに共通の変数をグローバル スコープで宣言したい場合に限り、
ウィンドウ
ローカル (関数) 効果ドメイン: メソッド内で宣言された変数、またはメソッド パラメーターの変数はローカル変数と呼ばれます
値の転送: ある変数の値を別の変数に代入すると、実際には元の変数の値が新しい変数
にコピーされます。
js 内のすべての代入は値によって渡されます。
宣言されていない変数に値を代入します。js は変数をグローバルに自動的に作成します。
関数のスコープは変数のスコープとまったく同じです
関数のスコープはメソッドの呼び出し時に作成され、メソッドの実行直後に破棄されます。
PM
質問:
メソッドのパラメーター: メソッド内の処理ロジックによると、正常に実行するには少なくともいくつかのデータが必要です。
メソッドのパラメータは、外部で定義された変数とは何の関係もありません。
メソッドのパラメーター関数: 1. 外部からの受信データを受信し、メソッド内で処理します。
2. メソッドを呼び出す人が提供する必要があるパラメーターを指定します。
メソッドの戻り値: メソッド呼び出し元のニーズに応じて! メソッド呼び出し元が明示的に結果を返す必要がある場合は、
戻り値を定義します。それ以外の場合、戻り値を定義する必要はありません。
キャッチするために変数を使用する必要があるのはどのような場合ですか?メソッドの戻り値は後続のプログラムで繰り返し使用される可能性があります!
軽蔑的な質問:
var num = 0;
function f1(num){
var num = 100;
console.log(num);
}
f1();
console.log(num);
//100 0
メイン レッスン:
カスタム関数:
グローバル関数: ECMAScript は、ブラウザの製造元によって実装された標準と関数を定義します。直接
に電話します!
isNaN(x) parseInt/Float(x)
encodeURI( kword ): URL 内の不正な文字を半角記号に変換します - エンコーディング
decodeURI( kword ): encodeURI を変換します 結果の文字列元のテキストに変換されます - デコード
unicode エンコード: 1 文字あたり 2 バイト
utf-8: 文字と数字の場合は 1 バイト、漢字の場合は 3 バイト
url 指定パラメータ 値には、予約語が再び出現する場合、それは不正です:
予約語: / ? $ : など
encodeURIComponent( kword ); は、シングルバイトの不正な文字だけでなく、マルチバイトの不正な文字もエンコードできます。
エンコード - これからはコンポーネント
を使用するだけで十分です。いつ使用されますか? URL 経由でデータを送信する場合は、まずエンコードしてから送信する必要があります。
decodeURIComponent(kword); encodeURIComponent() でエンコードされた文字列をデコードします。
でエンコードされた文字列を受信したら、まずデコードしてから処理する必要があります。
eval(): 文字列形式のコードを特別に実行します
プログラム構造: 3 種類: シーケンス、分岐、ループ
プログラム: IPO
要件: 名詞の検索 - — >プログラムには 2 種類のデータがあります
: 入力データ
出力データ
分析と処理の流れ:
分岐構造: プログラムの実行中に、さまざまな操作が可能です。さまざまな条件に従って実行されます。
分岐構造: if... 構造: 1 つのこと、実行するか実行しないのいずれか
if...else... 構造: 2 つのこと、2 つのうちの 1 つを選択して実行します
else if構造: 複数のもの、実行するものを選択
day04
復習:
メソッドパラメータ: メソッド内のロジックの処理に必要なデータ
パラメータはメソッド内でのみ使用されます方法!メソッドのパラメータ変数にはメソッド外ではアクセスできません
パラメータ名をカスタマイズしてください!
戻り値: 呼び出し元がメソッドの実行結果を取得する必要があるかどうか
分岐: 構造 1 の処理が実行できるかどうか
if...else... 2 の処理が必要かどうか
if...else if...[else...] 実行する複数の内容のうち 1 つを選択します
メインレッスン:
switch...case...複数の分岐、条件に基づいて判断、実行を選択
switch...case... は自動型変換なしで厳密な等価性を使用します
構文: switch(expression){
case 式 1: //式の値 === 式 1 の値の場合
コード セグメント 1;
ケース式 n:
コード セグメント n;
default://式の値とすべてのケースが等しくない場合
デフォルトのコードセグメント;
}
動作メカニズム: 式に一致するケースが見つかった場合は、次のコードを実行するだけでなく、現在のケースだけでなく、後続のすべての
コードもトリガーされます。
switch(true){
ケース スコア >= 90: console.log("A");
ケース スコア >= 80: console.log("B");
caseスコア >= 60: console.log("C");
default: console.log("D");
}
break: 現在の構造を終了します。
複数の条件は、同じセット 実行ロジックはブレークを追加しません。
switch(true){
ケース スコア >= 90: console.log("A");break;
ケース スコア >= 80: console.log("B");break;
ケーススコア >= 60: console.log("C");break;
デフォルト: console.log("D");
}
ループ構造: プログラムの反復同じコード スニペットのセットを実行します。終了条件が発生すると、実行は終了します。
ループ終了条件はなく、ループは永久に実行されます - 無限ループ
ループ内で失われる 3 つのステップ:
1. ループ条件: ループが実行を継続するための条件。 。ループ条件が満たされなくなると、ループは直ちに終了します。
2. ループ変数:ループ条件の判定に使用される変数。ループ変数はすべて、ループ終了の傾向
(ループ条件を満たさない傾向) - ループ カウンタ
に向かって変化します。 3. ループ本体: 各ループで行うこと
while ループ: ループ条件が満たされたとき 条件が満たされたとき、ループを続けて実行します...
構文:
var ループ変数;
while (ループ条件) {
ループ本体; > ループ変数を繰り返し変更する;
}
break: 現在の構造を終了します。
while で Break を使用する場合: ループ条件が満たされなくなる前にループを強制的に終了したい場合。
休憩の使い方は?ループを終了する必要がある場所ならどこにでも配置できます。
任意の最小値と最大値の間の乱数
式: parseInt(Math.random()*(max-min-1 ) min)
ループ条件が満たされない場合、ループ本体は少なくとも 1 回は実行できます。
var ループ変数;
do{
ループ本体;
反復変更ループ変数;
}while(ループ条件);
jsの先頭にある「宣言」が最初に抽出されます!
ループ変数の変更パターンは固定、ループ回数も既知で固定
for (ループ変数の宣言と初期化、ループ条件、ループ変数の反復変更) {
ループ本体
}
単純な方法を使用して、最も単純な作業を最初に実行します。
簡単な方法からルールを見つけよう!
プログラム = データ構造アルゴリズム
優れたデータ構造により、プログラムの実行効率が大幅に向上します。
用途: 複数の変数の集合に相当
なぜ?実際には、データはすべてバッチで分類および管理されます
使用する場合: 複数のデータをバッチで管理する限り、配列に保存する必要があります
使用方法: 配列内のデータの作成、初期化、アクセス
作成: 配列はすべて [] で作成されます。
var arr = [];——> 配列オブジェクトを作成しました。配列には 0 個の要素が含まれています。
var arr = [90, 34, 23];——> 配列オブジェクトを作成しました。array は 3 を継続的に格納します。
2 の要素は無制限です: 1. 要素の数に制限はありません。 2. 要素のデータ型に制限はありません
※配列は参照型のオブジェクトです*
プリミティブ型:データは変数にローカルに保存されます
参照型:データはローカルに保存されません変数に! 「ヒープ」に保存されます。
アドレスは実際のデータを指します
参照型の特徴:複数のデータを保存でき、データ数は随時変化します
なぜですか?プリミティブ型は 1 つの値しか格納できません
1 つの値で 1 つのことを正確に記述することはできません
実際には、同じものを記述するために複数の属性が使用されます
オブジェクト: ヒープに格納されるものはすべてオブジェクトです。
参照型オブジェクトを使用する: 変数を使用します。これは、オブジェクトのアドレスを使用するのと同じです。
オブジェクト アドレスを使用します。これは、オブジェクト自体を使用するのと同じです。
配列オブジェクトは、配列内容の直接出力をサポートします
new: ヒープ内のスペースを空けるために。
配列:ECMAScript標準組み込み型
new Array:ヒープ上に配列型の記憶領域を作成
(num):num要素の初期作成
var arr = new Array(7);
//[未定義, 未定義, 未定義, 未定義, 未定義, 未定義, 未定義]
未定義を出力した場合は空文字となります
var arr = new Array(要素 1, 要素 2,.. . , 要素 n);
null: 変数はオブジェクトを指していません。
null を使用する場合: オブジェクトを積極的に解放してください。アクティブにリリースされたオブジェクトは取得できません
null と未定義:
null は、アクティブにリリースされたオブジェクトに特に使用されます。
未定義: 未割り当ての変数を自動的に初期化する専用
ガベージ コレクション: JS エンジンは参照されなくなったオブジェクトを自動的に破棄します。
ガベージ コレクション プログラム: js プログラムの実行中にバックグラウンドで実行されます。
オブジェクトに変数参照がある限り、リサイクルされません。
配列へのアクセス: 配列は変数のコレクションです。
変数/データの 1 つを取得する方法: 配列内の要素を一意に識別するシリアル番号である添字。 0から始めましょう。最後に
要素の添字は「要素の数 - 1」です。
js 組み込みオブジェクトはストレージをカプセル化するだけでなく、一般的に使用される API もカプセル化します。
API: 実装済みのメソッド!直接電話してもいいですよ!
配列 API:
1. arr.length 属性: 配列内の要素の数
任意の配列の最後の要素にアクセスします: arr[arr.length - 1]
length 属性値。長さが変わると配列も自動的に変わります!
js 内の配列は、プログラムのニーズに応じて「自動的に拡張」され、プログラムが正常に実行されるようにすることができます。
配列の拡張と縮小: どちらも長さ属性の値を設定します。
長さ属性の値が > の場合、古い値は拡張され、逆に縮小 (切り捨て)
切り捨てられた要素は見つからないため、リサイクルされません。配列オブジェクトと一緒にのみリサイクルできます。
使用法を修正: 配列の末尾に新しい要素を追加: arr[arr.length] = 新しい値;
午後:
スタック内の変数のライフ サイクル: とは完全に異なります。ヒープ
var a = 5;//Web ページのライフサイクルに応じてグローバル変数が変化します
function fun(){
var b = 10;
}
fun();//スコープ環境スタック
/ *fun のスコープ環境スタックは fun のローカル変数をポップし、一緒に消えます*/
console.log(b);//refError
結論: ローカル変数の宣言サイクルは、
スコープが作成され、ローカル変数が一緒に作成されます
スコープが終了し、ローカル変数が一緒に消滅します
配列トラバーサルとは: 同じ操作を実行します。配列内の各要素
for(var i = 0; i
}
連想array: 配列の添字に名前を付けることができます。キーと値のペア
連想配列を使用する場合: 配列要素の内容がそれ自体の意味を説明できない場合、連想配列を使用して各要素に名前を付けます
連想配列の長さ属性が無効です。
for in: 連想配列を走査するために特に使用されます。
for(var key in arr){
//最初の要素から始めて、要素のキーを一時変数 key
arr[key]——>現在の要素の値走査中 (value)
}
連想配列リテラル定義方法: 強調: 中括弧
{"key1":"value1", "key2":"value2", ...}
バブルソート: [3、5、3、. 。 ]: array.html
を参照してください。 一般的な配列メソッド:
x.toString() メソッド: すべてのオブジェクトにはデフォルトで使用される toString メソッド
があり、各要素
を分割して任意のオブジェクトを String に変換します。
は通常、積極的に呼び出されません。JS は必要に応じて
x.valueOf() メソッドを自動的に呼び出します。 toStrin()
var str = arr.join("separator") と同じ: 配列を変換します。文字列に。ただし、セパレーターはカスタマイズできます。
使用法、文字を単語または文章に連結します。 chars.join("");
var newArr = arr.concat(1 要素の値, [配列], ...): パラメータを 1 つの要素に分割します。単一の要素が配列
に追加されます。
*元の配列は変更されませんが、新しい配列オブジェクトのみが返されます*
var subArr = arr.slice(start, end 1);要素を終了位置に配置し、
部分配列オブジェクトを生成します。 *頭部は含みますが、尾部は含みません*
arr.splice: 削除してください!入れる!交換する!
要素の削除: arr.splice(start, count);
要素の置換: arr.splice(start, count, value 1, value 2, ...);
要素の挿入: arr.splice( start、0、value 1、value 2、...)
削除された各要素で構成される新しい配列を返します
arr.reverse(); すべての配列要素を反転します
arr.sort() ;デフォルトは昇順で並べ替えます。デフォルトでは、すべてが文字列ソートに変換されます。
day06
マニュアル: JavaScript——>js オブジェクト——>js 配列——>配列オブジェクトリファレンスマニュアル
復習:
文字に変換文字列: x.toString()——>すべてのオブジェクトには toString メソッドがあります
var str = arr.join("separator")——>カスタム要素区切り文字
固定使用法: arr.join ("") ;——>配列内の文字列を単語または文字列にシームレスに結合します
スプライシングとインターセプト: var newArr = arr.concat(otherArr, value 1, ...)
var subArr = arr。 lice(start, end 1);
元の配列の一部の要素をコピーします。元の配列は変更されません
先頭は含まれますが、末尾は含まれません
splice: * 元の配列を直接変更します。 *削除された要素を返します
削除: [var selected =] arr.splice(start, count);
置換: [var rrmoved =] arr.splice(start, count, value 1, value 2, . . .);
変更されたすべての新しい値に対応するように配列の容量を自動的に調整します
挿入: [var rrmoved =] arr.splice(start, 0, value 1, value 2, ...);
メインレッスン:
並べ替え: arr.sort(); デフォルトは文字列の昇順です
カスタム並べ替え: 2 ステップ: ステップ 1: コンパレータ関数を定義します。
コンパレータ関数とは何ですか? 2 つの値の比較戦略を定義する方法
例: num1 - num2 > num2
関数Compare( a, b){
return a - b;
}// return >0 数値の場合、a > b; if return =0 数値, a = b;
***メソッドのパラメータを渡すにはどうすればよいですか? ***
js のメソッドもオブジェクトです。メソッド名はオブジェクトを指す変数名です。
function Compare(a, b){return a - b;}
//使用の前後どこでも定義可能
//理由: var 宣言と関数宣言は自動的に進められます。
以下と同等: var Compare = new Function("a", "b", "return a - b;");
//使用前に定義する必要があります。理由:事前に申告するだけで、事前に割り当てることはできません!
arr.sort(比較);注意!メソッドをオブジェクトとして渡すには、次の丸かっこ
を付けずにメソッド名のみを使用します。
昇順: function CompareASC(a, b){return a - b;}
Reverse (*-1): function CompareDESC(a , b){return b -a;}
スタックとは何ですか?後入れ先出し! (LIFO) スタックは実際には配列ですが、スタックの操作をシミュレートするために 1 組のメソッドを使用します!
スタック: 配列の一方の端からのみポップまたはプッシュできます。もう一方の端は閉じられています!
操作スタック:
最後にプッシュしてポップ: 要素の添字は常に変更されず、最後の要素は常に最新です
スタックへのプッシュ: arr.push(value 1, ...) ;
スタックからポップする :var last = arr.pop();
最初にプッシュしてポップする: すべての要素の添字がプッシュとポップ操作で変更されます
スタックにプッシュする: arr.unshift( value 1, ...);
ポップ: var first = arr.shift();
キュー: FIFFO
エンキュー: arr.push(value 1, ...);
デキュー: var first = arr.shift ();
2 桁の配列を作成する: 通常の配列とまったく同じように作成します。
通常の要素を配列オブジェクトに置き換えるだけです
var arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
arr[3] ] = [10, 11, 12];
2 桁の配列の要素にアクセスする方法: arr[親配列の添字][子配列の添字]
2 つのビット配列を使用する場合: データ明らかな上位と下位の関係が含まれています
組み込みオブジェクトとは何ですか?組み込みオブジェクトは、ECMAScript 標準で定義され、ブラウザの製造元によって実装された標準オブジェクトです。
組み込みオブジェクトは、特殊なデータと、データを操作するために一般的に使用される API をカプセル化します。
JavaScript の組み込みオブジェクト:
String,Boolean,Number,Array,Date,Math,Error,Function,Object,Global
パッケージング タイプ
パッケージング タイプとは何ですか?具体的には、プリミティブ型データをカプセル化し、データに対する一般的な操作のための組み込み型を提供します。
なぜパッケージングタイプを使用するのですか?プリミティブ型データにも参照型と同様のメソッドとプロパティを持たせます。
JavaScript には 3 つのラッパー型があります:
文字列型、数値型、ブール型
ラッパー型をいつ使用するか?プリミティブ型データを使用してメソッドを呼び出したり、プロパティにアクセスしたりする限り、JS エンジンは
に対応するパッケージ化型オブジェクトを自動的に作成します。
メソッドが呼び出された後、ラップされた型オブジェクトは自動的に解放されます。
var str = "Hello";
//var strObject = new String(str);
str = "world";
//strObject = null;
文字列ラッパー型: *文字列の内容は一度作成すると変更できません*
直接量: var stuName = "Smith";
型変換: var PriceString = String(190.3); 🎜>参照型の文字列オブジェクトを作成します:
var carType = new String("BMW528Li");
str.length: str 文字列の文字数を返します
大文字と小文字の変換: すべてを変換します小文字に変換: str = str.toLowerCase();
使用する場合: 大文字と小文字を同等に扱いたい場合は、最初に変換する必要があります。
組み込みオブジェクト: PPT を参照
パッケージ化タイプ: PPT を参照var num = 5.678;//元のタイプ
/ /num = new Number(num) ;//パッケージング タイプ
console.log(num.toFixed(2));
//num = null;//パッケージング タイプ オブジェクトを解放します!
文字列の作成: プリミティブ型またはラップ型? newかどうか
var str = "...";//元の型
******* ****************************************
var strObj = new String(". ..");//パッケージ化タイプ オブジェクト
エスケープ文字: 文字列内の非印刷文字を置き換えます: n t
文字列の内容に構文と競合する特殊文字が含まれている場合は、次のように変換できます。通常の文字
文字列コンテンツは一度作成されると変更できません。
変更した場合は、新しい文字列を作成し、新しい結果を保存し、古い文字列を置き換えます。
var str = "Hello";
var strObj = new String(str);
str = str。 toUpperCase();
//strObj = null;
console.log(str);
*ルール: すべての文字列 API は戻り値を受け取るために変数を必要とします。 *
文字列内の文字数: str.length 属性
*文字列型の最下層は、実際には文字配列を使用して実装されます*
例: str[i]
大文字と小文字の変換: 大文字と小文字が同等に扱われる場合、最初に変換してから
を処理します。 例: 重複した名前の検証、重複した電子メール、確認コード
指定された位置の文字を取得します。 var char = str.charAt(index) ;
指定された位置にある文字の Unicode エンコーディングを取得します: var num = str.charCodeAt(index);
最適化: * 頻繁に使用される文字列 =配列に置き換える必要があります。中間オブジェクトは生成されません*
ステップ 1: 各文字列を配列に入れます
ステップ 2: join("") で文字要素を結合します
今日、どの型も String に変更する必要があります。変更しないでください。 toString を使用し、 "" を使用する方が効率的です。
文字列に対する 3 つの主要な操作: 1. キーワードを検索します。 2. キーワードを置換します。 3. 部分文字列を取得します。
キーワードを検索します。 varindex = str.indexOf("keyword");
キーワードの場所を返します。 ※見つからない場合は-1を返します! *
indexOf: 遅延: 最初のキーワード位置のみを検索します。
愚か者: デフォルトでは位置 0 からしか開始できません。
var index = str.indexOf("keyword", from);
from: 検索の開始位置、from から開始、および逆方向に検索
1 つの文で複数のことを行う場合、次の式を使用できます。価値がある!
var str = "女神が来ると言っていたので、急いで部屋を片付けました。でも、女神はまた来るとは言えませんでした。私は「バカだ」と言いました。";
varindex = -1 ;
while((index = str .indexOf("我草", インデックス 1)) != -1){
console.log("場所" インデックス "キーワードが見つかりました");
}
最後の文字から前方検索: キーワードが末尾に近い限り、 last
varindex = str.lastIndexOf("keyword", from);
from: 開始を使用します。検索する位置、から開始して前方に検索
*返されるインデックスはまったく同じです。配列内の文字の添え字は固定されています。 *
2 つの変更: インデックスは str.length から始まり、各インデックスは -1
2 である必要があります。 部分文字列の取得: 次の 3 つのメソッドは 2 番目のパラメーターを省略し、デフォルトでは最後まで取得します。
var subStr = str.slice(start, end 1);
start, end は正と負をサポートします
var subStr = str.substring(start, end 1);
使用法は次と同じですスライス! 唯一の違い: 負の値はパラメータとしてサポートされません!
var subStr = str.substr(start, *count*);
JavaScript——>js string——>
PM:
ルールに従って文字列を分割します: var subs = str.split("separator"[, count]);
軽蔑的な質問: var str = "no zuo no die";
教室演習: 文字の種類を決定します: Unicode 範囲:
48-57: 0-9 数字
65-90: A-Z 大文字
97-122: a-z 小文字
19968-40869: 漢字
パターン マッチングとは: 検索ルールまたは置換ルールを設定できます。
パターン マッチングを使用する場合: 探しているキーワードは定期的に変化する可能性があります。
パターン マッチングの使用方法: 1. 最初にパターンを定義します: /keyword/pattern
例: var reg = /no/ig; no は、「」を追加しない、検索するキーワードの元のテキストです。
i は大文字と小文字を区別しないことを示します。 g はグローバル検索と置換を意味します。
文字列型は、特にパターン マッチングをサポートする API を提供します。
*キーワードをパターンで置換*: str = str.replace(reg, "new value");
デフォルトの置換では、最初のキーワードのみが置換されます。
グローバルに置換するには、パターンで "g" を定義します。
*すべて* キーワードの内容を取得します: var kwords = str.match(reg);
キーワードの内容のみを取得します。これは不可能です各キーワードの位置を決定します!
kwords.length: 見つかったキーワードの数!
*見つからない場合は null を返します。 *
可能な場合は常に null を返します。まず !=null を判断してから処理する必要があります。
SetupRegexBuddy.exe はデフォルトでインストールされます。
var index = str.search(reg); は、indexOf とまったく同じです。
indexOf はパターン検索をサポートしていません。 search は、実際には、indexOf
のパターン検索バージョンです。将来、Web ページで文字列の形式が処理される限り、正規表現
*正規表現*
正規表現とは: 文字列文字の出現パターン
正規表現を使用する場合文字列形式を確認し、キーワードを検索し、キーワードを置換します
例: 銀行カードのクエリ パスワード: 6 桁
ユーザー名: 文字、数字、_
正規表現:
シンボルを選択: [すべての代替文字]: [草を取り除く]、複数の文字を選択し、
[] を使用する必要があります。これは 1 つの文字のルールのみを表すことができます
[^xxxx]: 可能ですxxxx を指定してください!対義語。 [] の最初の位置に配置する必要があることに注意してください。そうでない場合は、通常の文字
の一致になります。
- シンボル: 文字の範囲: 代替文字は連続した範囲です。
例: [0-9] [a-z] [A-Z] [a-zA-Z]//- ローカルで使用可能
漢字範囲: [u4e00-u9fa5]
事前定義文字セット: 一般的に使用される文字セットを定義するには、簡略化された記号を使用します。
例: [0-9] ——> d [a-zA-Z0-9_] ——> w 空文字 ——> 🎜>
ルールの本文中に特殊記号が含まれている場合は、元のテキストに変換してください
。
量子: 前の文字が 2 回出現する回数を指定します。
文法: {min,max}
{num}: 固定長
{min,}: 少なくとも min、それ以上制限なし
携帯電話番号: 86s1[3578]d{9}
ユーザー名: w{6,8}
day08
返信:
[ ]: 代替文字セット。複数選択できるのは 1 つだけです。 [] は 1 文字のみと一致します
例: I [草に行く]: 私は草に行きます
[] 内: ^ で始まる: xx を除く: [01235689] ——> [^47] ]
-: 代替文字の範囲を表します: [a-z] [0-9] [A-Z]
事前定義された文字セット:
[0-9] ——> d
[a-zA-Z_] ——> w
s: 空の文字: n t スペース
数量子: 前の文字の出現数を変更します
{min,max}: 少なくともmin 、最大 max
{min,}: 最小最小、最大無制限
{num}: 固定数値
例: 固定電話番号を確認します: d{3,4}-d{ 7, 8}
メインレッスン:
特殊数量詞: * ?
? : オプション。複数の
に対して 1 回のみ表示できます。 例: 私?ゴ: 行った、行った、行った、行った、行った、行った 私の人生を照らす火
私の人生を照らす火 火の火
: 少なくとも 1 回は表示されます!出現回数に制限はありません
例: 私の人生の火を灯してください:
私の人生の火を灯してください
?* がテキスト内に表示されます。すべてエスケープ
() を使用するには: グループ化: パターンの一致順序を変更します
携帯電話番号を確認: (86)?s 1[3578]d{9}
^: 正規表現全体の先頭。xxx $: 正規表現全体の終わり。xxx で始まることを示します。 End
?= Prediction、前の文字の後に、xxx
を続けてはいけません。教室での練習: 中国語名: [u4e00-u9fa5]{2,6}
ここで: w ([-]w )* —— 一致するドメイン名
複数の文字、その後に「-letter」、オプションで続きます
「.letter」の組み合わせ少なくとも 1 回表示されます
RegExp オブジェクト: 正規表現の数式を特別にカプセル化し、正規表現を使用するための共通 API を提供します
RegExp オブジェクトの使用方法: 1. 作成 2. API の呼び出し
v作成方法正規表現オブジェクト: ar regExp = /正規表現/ig;
API :
検証に合格した場合: true を返し、それ以外の場合は false を返します。 🎜>検証と検索:
検証には完全一致が必要です。検索には部分一致が必要です。
**デフォルトのテスト メソッド: 見つかった限り true を返します。 **
正規表現の前に ^ を追加し、その後に $ を追加します
検索: exec: キーワードの場所を検索し、キーワードの内容を検索します。
indexOf は正規表現をサポートしていません。検索正規表現をサポートしています。すべてのコンテンツと一致するために一度に 1 つの
var arr = regExp.exec("見つかったコンテンツ");
arr[0]: 見つかったキーワードのコンテンツ
execメソッド 一度に検索できるのは 1 つだけですが、regExp オブジェクトの lastIndex 属性は毎回自動的に変更されます。
regExp オブジェクトの lastIndex 属性: 次回のマッチングの開始位置を示します。
検索: 存在するかどうかの判断のみ、または場所の検索のみ: str.indexOf()
正規表現のサポート: str.search()
すべてのキーワードの内容のみ: str. match( )
場所とコンテンツの両方を検索します: regExp.exec()
var regExp = new RegExp("\d{6}", "ig") ; 正規表現を動的に作成します
強調: すべてを \
に変更する必要があります: .*、デフォルトでは、最初に文字列全体が一致し、その後範囲が狭められます。
PM:
正規表現に一致するコンテンツの一部を取得します: RegExp .$n
強調: グループ化は 1 から始まります
は RegExp 型を渡し、$n を直接呼び出す必要があり、オブジェクトは使用できません。
文字列オブジェクトと正規表現
str = str.replace(/正規表現/ig, "置換値");
var arr = str.match(/正規表現/ig str); .search()
str.split(/正規表現/);
入力文字列を処理する場合、ほとんどの場合、処理する前に最初に先頭と末尾のスペースを削除する必要があります。
IE8 は、trim() メソッドをサポートしていません。
カスタム trim() メソッド:
function trim(str){
str = str.replace(regExp, "" ) ;
文字列を返します;
}
文字列の概要: すべての API は元の文字列を変更できず、新しい文字列を返します。
すべての StringAPI は結果を保存するために変数を使用する必要があります。
str.length 文字数
str = str.toUpperCase()/toLowerCase()
キーワードの検索: varindex = str.indexOf("Keyword"[, from])
var arr = str.match(/正規表現/g);
部分文字列の取得: var substr = str.slice(start, end 1);
str.substring(start, end 1);
str.substr (start, count);
置換: str = str.replace(/正規表現/g, "置換値");
指定された位置の文字を取得します: var char = str.charAt(index);
str[index];
文字エンコーディングのトランスコーディング: var code = str.charCodeAt(index);
var char = String.fromCharCode(code);
RegExp オブジェクトの概要:
var reg = /正規表現/ig;
var reg = new RegExp("正規表現", "ig");
※すべて\!に変更する必要があります。 *
str に reg 一致キーワードが含まれていることを検証する場合:
var boolean = reg.test(str);
* 強調: 完全に検証するには、正規表現の前後に ^ を追加する必要があります。 $*
すべてのキーワードの内容と場所を同時にクエリします
while((arr= reg.exec(str)) != null){
arr[0] —— >
arr.index のキーが見つかりました ——> 現在のキーワードの位置
}
RegExp.$n:
内の n 番目のグループ (括弧) の一致を取得します。正規表現 部分文字列
数学タイプ: すべての数学計算関連 API をカプセル化します
を新規にすることはできません。
Math.PI
Math.round(num) ——> 4 分の 5 の丸め
Math.ceil(num) ——> 切り上げ
Math.floor ( num) ——> 切り捨て
Math.pow(base, power);
Math.sqrt(num);//平方根!
絶対値: Math.abs(num);
Math.max/min(value 1, value 2, value 3, ...);
次の最大値を取得します。配列値: var max = Math.max.apply(Math, arr);
乱数: Math.random(); 任意の最小値〜最大値:
Math .floor(Math.random() * (max - min 1) min);
//ステップ 1: 配列: すべての文字、数字
var code = [];
for(var i = 48; i for(var i = 65; i for(var i = 97; i
var arr = [];
for(var i = 0; i var Index = Math.floor(Math.random()* (60- 0 1) 0);
var char = String.fromCharCode(codes[index]);
arr.push(char);
}
return arr.join("") ;
}
var code = getCode();
var input = prompt("確認コードを入力してください:" code);
var reg = / ^[a -zA-Z0-9]{4}$/;
if(reg.test(input)){
if(code.toLowerCase() == input.toLowerCase()){
document.write("ログイン成功");
break;
}else{
alert("認証コード入力エラー!");
}
}
}
作成: var date = new Date();
1. Date 型オブジェクトを作成します。ブラウザの現在の時点!
時間のカスタマイズ: var date = new Date("2015-6-9 16:47");
1. 日付型オブジェクトを作成します。 2. 特定の時点をカスタマイズします。
は、1970 年 1 月 1 日の 0:00:00 から現在
var date = new Date();
1 までのミリ秒数を保存します。各コンポーネントには、コンポーネントの値を取得/設定するための 1 対の get/set メソッドがあります。
2. 名前付け: 年/月/日の はなく、時、分、秒の はあります。
3. 毎月の日を除く残りの部分は から始まります。 0 で終了 - 1 の終わり
月の日は 1 から始まり 31 で終わります
月: 値を取得するときは、値を割り当てるときに 1 で修正する必要があります。 -1
週: //1 日目.................... 6
//0 1 6
時間: var nowMs = date.getTime(); 時間をミリ秒で返します
var nextMs = nowMs 5*60*1000;
var next = new Date(nextMs);
次の場合はミリ秒を使用します計算を実行し、元の時間オブジェクトを変更しないでください。時間オブジェクト
は再パッケージ化する必要があり、「日数」までしかカウントできません。 「月数」を数えても、各月の日数を決定することはできません。 " 2016/7/4"); PPT の new Date("2016-7-4"); chrome
API
2名前: s なしの年、月、日、週、s
3 付きの値の範囲: 月の日: 1 ~ 31、その他: 0-マイナス 1
: 1. 2 つの日付を減算し、ミリ秒数を取得します
2. 日付/- 日、時間、分、秒: ミリ秒を使用します
3 つの部分: 1.var ms = date.getTime();
2.ms = ms /- ミリ秒数
3.var newDate = new Date(ms);
メインレッスン:
3. コンポーネントの計算:
最初に取り出しますコンポーネントの値を計算し、それを元に戻します。
var now = new Date();
var day = now.getDate();//4
day -= 10;//-6
now.setDate(day) ;
document.write(now);
date.setXXX(); 1. 基本システムを自動的に調整します
2. * 元の日付オブジェクトを直接変更します *
元の日付オブジェクトを保持するには?まず新しい Date オブジェクトを作成し、次に set
var newDate = new Date(oldDate.getTime());
日付形式変換:
date.toLocaleString();//日付を取得し、 time ローカル形式
date.toLocaleDateString();//日付部分のローカル形式のみを取得します
date.toLocaleTimeString();//時間部分のローカル形式のみを取得します
日付フォーマット変換:両方 format(date)メソッドをカスタマイズするには!
function format(date){
var week = ["日", "一", "二", "三", "四", "五", "六"];
var y = date.getFullyear() "年";
var m = date.getMonth() 1 "月";
var d = date.getDate() "日";
var w = "週" 週[date.getDay()];
var h = date.getHours();
var am = h >= 12 ? "午前" : "午後";
h = h > 12 ? h - 12 : h;
h = h
var mi = date.getMinutes();
mi = mi
var s = date.getSeconds();
s
var str = y m d w am h ":" mi ":" s;
return str;
}
数値型 API:
num.toFixed(n) ; 小数点以下 n 桁に丸め、*文字列を返します*!
使用する場合: 計算後の表示結果は、*最終的に固定メソッドを呼び出します*
vs Math.round(num): 数値を返すためにのみ丸めることができます。 Number
num.toString( n ): n 進数で数値を出力する文字列形式
エラー処理:
エラー処理とは: プログラムの実行を停止させる実行時例外状態
エラー処理とは: 例外が発生した場合状態の発生 はい、プログラムが停止しないことを保証するメカニズム
エラーの処理方法:
エラーの種類: エラーの種類: すべてのエラー オブジェクトの親の型
6 つのサブタイプ: EvalError、
RangeError : パラメーターが範囲外です
例: num.toFixed(n) n<0 throws RangeError
ReferenceError: 参照エラー: オブジェクトが見つかりません
例: 未宣言の変数が使用されるたびに、ReferenceError
SyntaxError がスローされます: 構文が間違っています!ソースコードを修正すれば解決できます!
TypeError: type と type メソッドの使用が間違っています!
URIError: URI エラー
エラーの処理方法:
try{
考えられるエラー コード
}catch(err){エラーがスローされる限り、Error オブジェクトを作成します
エラー処理コード
1. エラー情報を取得します: err.name type
2. エラーの種類に応じて異なる処理を実行します
}[finally{optional
//プログラムで使用されます!また、エラーの有無に関係なく実行する必要がある
コードを積極的に解放する必要があります
}]
if...else で解決できる問題は try.. する必要はありません。 。キャッチ!
try...catch をいつ使用するか?試してみてください...予期せぬ問題を伴う取引をキャッチしてください!
積極的に例外をスローする: メソッドの呼び出し元にエラーが発生したことを通知するにはどうすればよいですか?
thow new Error("Customized error message");
午後:
関数オブジェクト:
1. メソッドを宣言的な方法で定義します。
function の前後 メソッド名 (パラメータ リスト) {メソッド本体; return 戻り値}
2. オブジェクトを作成してメソッドを定義します。メソッドは使用前に定義する必要があります。
var メソッド名 = new Function("パラメータ 1", ..., "メソッド本体; return 戻り値");
宣言モードのメソッド定義のみが事前に解析されます。 ——事前にメソッドを宣言
オーバーロード: メソッドは、渡されたパラメータリストに従って、さまざまなタスクを実行します
JS サポートはオーバーロードをサポートしていません: 構文はサポートされていませんが、引数を通じてオーバーロードをシミュレートできますobject Effect
arguments object: メソッド内のすべてのパラメータを格納する配列のようなオブジェクト object
配列のようなオブジェクト: 配列のように長いオブジェクト
* メソッド内で自動的に作成されます!直接使ってください! *
arguments.length: 保存された変数の数
arguments[i]:
で渡された i 番目の変数にアクセスします。 3. 匿名関数代入を使用してメソッドを定義します:
匿名関数: メソッド名のない関数定義!
var Compare = function(a, b){return a-b;}
軽蔑的な質問: js でメソッドを定義するにはいくつかの方法があります: 3 つの方法!
A.function Compare(a, b){return a - b}
***************************** ***** ********************************************
B. var Compare = function(a, b){return a - b;}
C.var Compare = new Function("a", "b", "return a- b;");
D.var Compare = new Function(a, b, return a- b;); }else if(str == null){
}else{
var reg = / ^s*$/;
return reg.test(str);
}
}
var ltrim = function(str){
var reg = /^s /;
return str.replace(reg, "");
}
var reg = /s $/;
return str.replace(reg, "");
}
匿名関数の 2 つの使用法:
1. コールバック関数: プログラマは関数の実行時期を制御する必要はありません。
環境によって実行されます!
比較!
//var Compare = function(a, b){return a - b;} arr.sort(compare);
arr.sort(function(a, b){return a - b;})
イベント処理関数: onclick = "calc(12)";
2. 自己調整関数: 匿名関数が自分自身を呼び出します。
関数を再利用する必要がない場合は、匿名関数のセルフチューニングを使用します。
構文:
(関数(パラメータ...){
メソッド本体;
})(パラメータ値...);
関数が定義されている場所ですぐに実行します。
クロージャ: 関数に属さないローカル変数が関数の外で使用されています
クロージャを使用する場合?ローカル変数を保護する
day10
レビュー
1. クロージャ
ジャッジメントクロージャ 3 の特徴:
1. 入れ子関数
2. 内部関数は外部関数のローカル変数を操作します
3.外部関数は内部関数を外部
に返し、グローバル変数
によって保存されます。 クロージャーの実行結果を決定します:
*1。 外部関数が呼び出される回数、回数。保護されたローカル変数のコピー
2. クロージャから関数を繰り返し呼び出すと、保護されたローカル変数が何度か変更されます
主なレッスン:
1. オブジェクト指向
1 を作成します。カスタム オブジェクト
2. ****継承
1. オブジェクト指向: プログラムでは、オブジェクトは現実の特定のものを記述するために使用されます。および関数:
属性: モノの特性を記述する変数
機能: モノは操作を実行できます
オブジェクトとは: 複数のデータをカプセル化する記憶域
カスタム オブジェクトとは: A現実の物の属性と機能をカプセル化する記憶空間
。現実の物の属性は、オブジェクト内の属性変数になります。現実の何かの関数は、オブジェクト
内の
のメソッド (関数) になります。2. カスタム オブジェクトを作成します:
1. var obj = {'プロパティ名 1' :値 1,
'属性名 2':値 2,
...
'関数名 1':function()
{...}};
js 内のすべてそれらはすべてオブジェクトです!すべてのオブジェクトの最下層はハッシュ配列です
属性: 属性へのアクセス方法: 2 種類: obj 属性名 obj["属性名"]
オブジェクトに存在しない属性にアクセスします
( に存在しない配列添字にアクセスします): エラーは発生しません。存在しないプロパティの割り当てを強制するために未定義
を返します。エラーは報告されません。 js は同じ名前のプロパティを自動的に作成します
オブジェクトに指定されたメンバーが含まれているかどうかを判断する方法: 3 種類
1. obj.hasOwnProperty("メンバー名");
2.オブジェクト内のプロパティ名"
見つかった場合は true を返し、それ以外の場合は false を返します
3. obj. 属性名を条件として直接使用します:
arr.indexOf !== unknown
含まれていない場合は、 return unknown ————> ; false
含まれる場合は戻り値または関数 ————> true
省略する場合: メソッドが存在するかどうかを判断する場合は省略できます!==
属性値が
not null、0、""、NaN でなければならないと判断された場合は、省略することもできます。
メソッド: メソッド内で現在のオブジェクト自体にアクセスする方法:
** **このキーワード: 実行時に、*呼び出される*メソッドを参照します。 オブジェクト
( の前のオブジェクト)
これは本質的に、ウィンドウの下にある唯一のポインターであり、現在
を呼び出しているオブジェクトを指します。メソッド
メソッド内で現在のオブジェクトの独自のプロパティにアクセスする方法: this. 属性名
** メソッド内で現在のオブジェクトの独自の属性にアクセスするには、属性
名 < を使用する必要があります。 🎜> これを省略すると、アクティブなオブジェクトとウィンドウ内の変数がデフォルトでアクセスされます (閉じられた
パッケージを除く)
***これは定義の場所とは関係ありません。これは、
*** を呼び出すときに使用される現在のオブジェクトにのみ関係します。*** 所有者なしで呼び出しまたはコピーが行われた場合、デフォルトではこれは window!
PM:
メインレッスン:
1. ***オブジェクト指向: 継承
オブジェクト指向の 3 つの主要な特徴: カプセル化継承ポリモーフィズム
カプセル化: 同じものを記述するプロパティとメソッドはオブジェクトで定義されます
継承: 親オブジェクトのプロパティとメソッドは子オブジェクトで直接使用できます
ポリモーフィズム: 同じオブジェクトが、異なる状況下で異なる状態を示します
複製読み込み:同じメソッド名、異なるパラメータが渡され、異なる操作が実行される
書き換え: 子オブジェクトは、親オブジェクトのメンバーが使いにくいと感じるため、独自の
を定義してメンバーを上書きできます。親オブジェクトの
オブジェクトの作成: 3 種類:
1. オブジェクトの直接数量
var obj = {"プロパティ名": value, ..., "メソッド名": function() {...}};
2. var obj = new Object();// 空のオブジェクト
obj を作成します。メソッド名 = function() {... this. プロパティ名 ...};
3. コンストラクターを使用して、*同じ構造* を持つオブジェクトを*繰り返し*作成します。
コンストラクター: の構造を記述する特別な関数です。オブジェクトのクラス
ステップ 2:
1 . コンストラクターの定義
関数コンストラクター名|型名 (属性パラメーター 1, ...){
this.属性名 = 属性パラメーター 1;
//現在作成中のオブジェクトに属性名を作成します
//属性パラメータ1の値を代入
...
this.メソッド名 = function(){
...this.属性名...
}
}
2. コンストラクターを使用してオブジェクトを作成します
var obj = 新しいコンストラクターの型名 (属性値 1, ...);
new: 1. 空のオブジェクトを作成します: new obj = {};
2. 空のオブジェクトを使用して、コンストラクターを呼び出します。
コンストラクターは、属性と
メソッドを空のオブジェクトに追加します
3.コンストラクターの
プロトタイプ オブジェクト
を指す新しいオブジェクトの __proto__ 4. 新しいオブジェクトのアドレスを返します
継承: js のすべての継承はプロトタイプ オブジェクトを使用して実装されます。
プロトタイプ オブジェクト: 各関数オブジェクトにはプロトタイプ オブジェクトがあります。
推奨事項: サブオブジェクトによって共有されるすべてのメソッドは、コンストラクターのプロトタイプ オブジェクトで定義する必要があります。 ————
—メソッド オブジェクトを繰り返し定義してメモリを無駄にしないようにします。
注: 実際、すべての組み込み型 API は type.prototype
で定義されています。
拡張オブジェクト属性: 2 種類の拡張:
1. 拡張共通属性:constructor.prototype によって追加された属性
2. 拡張された独自属性: 特定のサブオブジェクトに属性を追加することで判断されます
プロパティまたは拡張プロパティ:
1. 独自のプロパティを決定します: obj.hasOwnProperty("プロパティ名");
2. 共有プロパティを決定します: obj && !obj.hasOwnProperty("プロパティ名")
はプロトタイプ オブジェクトの関係に含まれており、サブオブジェクト
自体には
属性の削除: オブジェクトの削除* は現在のオブジェクト自体の属性のみを削除できます。共有属性は削除できません
グローバル変数: 3 種類
var n = 1; window["n"] = 1; 削除できません
プロトタイプ チェーン: すべてのレベルでのオブジェクトの __proto__ の段階的な継承によって形成される関係
オブジェクトの親オブジェクトを確認します: Parent object.isPrototypeOf(child object);
オブジェクト指向: カプセル化、継承、ポリモーフィズム
1. オブジェクトを作成します。 : 3 種類: 4 種類:
1. 直接量 :var obj = {"属性名": value, ..., "メソッド名": function(){}};
__proto__ ———— > Object.prototype
2. 新しいキーワード: var obj = new Object();
obj。メソッド名 = function(){}
3. コンストラクターを使用して同じ構造体オブジェクトを繰り返し作成します: 2 つの手順
1. コンストラクターを定義します:
関数コンストラクター名 (プロパティ パラメーター, ...) {
this.property name =プロパティパラメータ;
if(! コンストラクタ名.プロトタイプ.メソッド名){
コンストラクタ名.プロトタイプ.メソッド名 =
関数(){}
}
}
2. new を使用してオブジェクトを作成し、同時にコンストラクターを呼び出します:
var obj = 新しいコンストラクター名 (属性値, ...);
4. Object.create (親オブジェクト, {拡張されたオブジェクトのリスト)属性});
2. this: メソッドを現在呼び出しているオブジェクトを表します
これは定義場所とは関係ありません。それは呼び出し時に使用されるオブジェクトにのみ依存します。
すべての所有されていない変数 (var 割り当てのない変数、匿名関数) はウィンドウの
3. プロトタイプ、プロトタイプ チェーン、継承:
プロトタイプ: すべてのサブクラスに共通のプロパティとメソッドを保存するオブジェクト。オブジェクト!
すべての関数にはプロトタイプがあり、独自のプロトタイプ オブジェクトを指します
すべてのプロトタイプ オブジェクトにはコンストラクターがあり、プロトタイプに対応するコンストラクターを指します
プロトタイプチェーン: すべての親子オブジェクト間の __proto__ によって形成されるマルチレベルの参照関係
————>*マルチレベル* 継承
プロトタイプ関連 API:
1.判定 所有プロパティと共有プロパティ:
1. 所有の決定: obj.hasOwnProperty("プロパティ名");
2. プロトタイプチェーン上のプロパティの決定: 2 種類
判定には含まれません: if(! (obj/prototype の "プロパティ名")
if(obj.property name=== unknown)
if(!obj.property name)
3. 共有の判定のみ: 2 つの条件が満たされる必要があります。
!obj.hasOwnProperty("プロパティ名") && obj.Property name
2. 任意のオブジェクトのプロトタイプを取得します:
obj.__proto__ X
Object.getPrototypeOf(obj)
3親オブジェクトが子オブジェクトのプロトタイプ チェーン上にあるかどうかを判断します
Parent object.isPrototypeOf(child object)
***オブジェクトが配列型であるかどうかを検出します: 4 種類:
1. Array.prototype .isPrototypeOf(obj);
2. object of Array
オブジェクトはコンストラクターのインスタンスですか
3. obj.constructor == 配列は直接の親のみを決定します
4現在のオブジェクトを使用して、元の toString メソッドを強制的に呼び出します。
Object.prototype.toString.call(obj) == "[object Array]"
apply(obj)
継承:
継承する理由: コードの再利用!スペースを節約しましょう!
1. オブジェクトを直接継承する: オブジェクトの __proto__ 属性を変更する方法を見つける
3 種類:
1. 1 つのオブジェクトの __proto__ のみを変更する
Object.setPrototypeOf(子オブジェクト、親オブジェクト) );
2. コンストラクターのプロトタイプオブジェクトを変更することで、後続のサブオブジェクトの継承関係を一括で変更できます。
Constructor.prototype = 親オブジェクト
強調: 後で作成されたオブジェクトの継承関係にのみ影響します。
以前に作成されたオブジェクトは、古いコンストラクター
Number.prototype
3 を継承します。 create(parent object[, {property list}])
空のオブジェクトを作成し、
親オブジェクトの属性を継承します。
属性とメソッドを同時に継承および拡張します
2 . 継承構造のみ: Java での継承をシミュレートします。
関数の親型コンストラクター (プロパティ パラメーター 1、プロパティ パラメーター 2) {
this.property 1 = プロパティ パラメーター 1;
this.property 2 = プロパティ パラメーター2;
}
関数サブタイプ コンストラクター (属性パラメーター 1、属性パラメーター 2、属性パラメーター 3) {
親型constructor.call(this, 属性パラメーター 1, 属性パラメーター 2 );
this.property3 =propertyparameter3;
}
var obj = 新しいサブタイプ コンストラクター (value1, value2, value3);