ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript 必読ノート (1,2)_JavaScript スキル

JavaScript 必読ノート (1,2)_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 18:35:05922ブラウズ
第 1 章 本質
JavaScript の機能の中には、その価値よりも面倒なものもあります。その中には、仕様が非常に不完全であるため、移植性の問題が発生する可能性があるものや、コードの生成が難しくなり、コーディング スタイルが非常に複雑になり、エラーが発生しやすいものもあります。一部の機能は単なる設計ミスです。言語設計者は時々間違いを犯すことがあります。
ほとんどのプログラミング言語には、良い部分と弱い部分があります。良い部分だけを使い、無駄なものを避ければ、より良いプログラマーになれることがわかりました。結局のところ、どうやってくだらない部品から良いものを構築できるのでしょうか?
標準委員会が言語の欠陥部分を削除することはほぼ不可能です。そうすることで、それらの役に立たない部分に依存する悪いプログラムすべてが損傷を受けることになるからです。通常、既存の欠陥の山の上にさらに機能を積み上げる以外にできることはありません。また、新しい機能と古い機能が常に調和して共存するとは限らず、無駄な部分が増える可能性があります。
ただし、独自のサブセットを定義する権限はあります。最良の部分に基づいて、より良いプログラムを作成できます。 JavaScript には無駄な部分の割合が予想を超えています。驚くほど短期間で、存在しなかった状態から世界的に普及するまでになりました。実験室で試して磨いたことは一度もありません。それがまだ非常に粗雑だったとき、それは Netscape の Navigator 2 ブラウザに直接統合されました。 Java アプレットの廃止により、JavaScript がデフォルトの「Web 言語」になりました。プログラミング言語としての JavaScript の人気は、その品質とはほぼ完全に無関係です。
幸いなことに、JavaScript には非常に重要な部分がいくつかあります。 JavaScript の最も本質的な部分は深く隠されているため、長年にわたって JavaScript は醜くて役に立たないおもちゃであるという主流の見方が主流でした。本書の目的は、JavaScript の本質を明らかにし、JavaScript が優れた動的プログラミング言語であることを皆さんに知ってもらうことです。
本質的な部分だけを学ぶことの最大の利点は、無駄な部分について考えなくて済むことかもしれません。悪いパターンを学習しないことは非常に困難です。これは、私たちのほとんどが直面したくないであろう非常に苦痛な仕事です。場合によっては、生徒がより良く学習できるように、言語のサブセットが開発されることがあります。しかし、ここでは、マスタープロフェッショナルにとってより適切に機能する JavaScript のサブセットを作成しました。
1.1 JavaScript を使用する理由
JavaScript は Web ブラウザーの言語であるため、重要な言語です。ブラウザとの統合により、世界で最も人気のあるプログラミング言語の 1 つになりました。同時に、世界で最も過小評価されているプログラミング言語の 1 つでもあります。ブラウザー API とドキュメント オブジェクト モデル (DOM) があまりにもひどいため、JavaScript は不当な非難を受けています。
JavaScript はいわゆる主流言語ではないため、最も軽蔑されている言語です。主流の言語に堪能でも、JavaScript のみをサポートする環境でプログラミングをしている場合、JavaScript の使用を強制されるのは非常に面倒な場合があります。ほとんどの人は、最初に JavaScript を学ぶ必要性を感じていませんが、JavaScript が自分たちが使用したいと考えている主流の言語とは大きく異なり、これらの違いが重要であることに気づくと驚かれます。
JavaScript の驚くべき点は、その言語やプログラミングについてあまり知らなくても、JavaScript を使って作業を進めることができることです。非常に表現力の高い言語です。何をすべきかがわかっていれば、さらにうまくいきます。プログラミングは難しいです。何も知らずに仕事を始めてはいけません。
1.2 JavaScript の分析
JavaScript は、いくつかの非常に良いアイデアといくつかの非常に悪いアイデアに基づいて構築されています。
これらの本当に良いアイデアには、関数、弱い型付け、動的オブジェクト、表現力豊かなリテラル表現が含まれます。これらの悪いアイデアには、グローバル変数に基づくプログラミング モデルが含まれます。
JavaScript 関数は、(主に) 字句スコープに基づくトップレベルのオブジェクトです。 JavaScript は、主流になった最初のラムダ言語です。実際、JavaScript には Java よりも Lisp や Scheme との共通点が多くあります。 Cの服を着たLispです。このため、JavaScript は非常に強力な言語になります。
強い型付けは、今日のほとんどのプログラミング言語で一般的な要件です。この考え方は、強い型付けによりコンパイラがコンパイル時にエラーを検出できるようにするというものです。バグを早期に検出して修正できるほど、費用は安くなります。 JavaScript は型指定が弱い言語であるため、JavaScript コンパイラーは型エラーを検出できません。一方、弱い型付けは実際には無料です。複雑なサブシステムを作成する必要はなく、キャストを行う必要も、必要な動作を得るために型システムを操作する必要もありません。
JavaScript には非常に強力なオブジェクト リテラル表現があります。オブジェクトは、その構成要素をリストするだけで作成できます。この表現により、一般的なデータ交換形式である JSON が誕生しました。
プロトタイプの継承は、JavaScript における物議を醸す機能です。 JavaScript にはクラスフリーのオブジェクト システムがあり、オブジェクトは他のオブジェクトからプロパティを直接継承します。これは非常に強力ですが、クラスを使用してオブジェクトを作成する訓練を受けたプログラマーにとって、プロトタイプの継承は馴染みのない概念です。クラスベースのデザイン パターンを JavaScript に直接適用しようとすると、挫折することになります。ただし、JavaScript のプロトタイプ的な性質の使い方を学べば、その努力は報われます。
JavaScript は、重要なアイデアの選択に関して批判されています。ただし、ほとんどの場合、これらのオプションが適切です。しかし、非常に悪いオプションが 1 つあります。それは、JavaScript が連結にグローバル変数に依存しているということです。すべてのコンパイル単位のすべてのトップレベル変数は、グローバル オブジェクトと呼ばれる共通の名前空間にグループ化されます。グローバル変数は悪魔であり、JavaScript の基本であるため、これは悪いことです。
場合によっては、無駄な部分を無視できない場合があります。避けられないバグもいくつかありますので、その部分に関しては指摘させていただきます。くだらない部分とその不適切な使用方法について知りたい場合は、他の JavaScript の本を読んでください。
JavaScript は多くの違いがある言語です。これには多くのバグと鋭いエッジが含まれているため、「なぜ JavaScript を使用する必要があるの?」と疑問に思うかもしれません。答えは 2 つあります。 1つ目は、選択の余地がないということです。 Web は重要なアプリケーション開発プラットフォームになっており、JavaScript はすべてのブラウザーが認識できる唯一の言語です。残念ながら、Java はブラウザ環境では失敗します。 JavaScript の精力的な開発は、JavaScript に利点があることを示しています。
もう 1 つの答えは、JavaScript には欠点があるにもかかわらず、非常に優れているということです。軽量かつ表現力豊かです。一度コツを掴めば、関数型プログラミングはとても楽しいものになります。
しかし、この言語をより良く使用するには、その限界を知る必要があります。容赦なく暴いてやる。これで落胆しないでください。この言語の優れた部分は、その弱点を補って余りあるものです。
1.3 単純な試験場
Web ブラウザとテキスト エディタがあれば、JavaScript プログラムを実行するために必要なものがすべて揃っています。まず、program.html という名前の HTML ファイルを作成してください:
コードをコピーします コードは次のとおりです:




;/pre>



次に、program.js という名前のスクリプト ファイルを作成します。 >document .writeln('Hello, world!');
次に、ブラウザを使用して HTML ファイルを開いて結果を表示します。本書全体を通じて、新しいメソッドを定義するためにメソッドメソッドが使用されます。その定義は次のとおりです:


Function.prototype .method= function(name,func){
this.prototype[name]=func;
これを返す
}


第4章で説明します。
第 2 章 構文
この章では、JavaScript の本質となる構文を紹介し、その言語構造の概要を簡単に説明します。
2.1 空白
空白は、文字またはコメントの書式設定の形式で表示される場合があります。通常、空白には意味がありませんが、空白がなければ 1 つの記号に結合される一連の文字を区切るために必要になる場合があります。たとえば、次のコードの場合:
var that = this;
var と that の間のスペースは削除できませんが、他のスペースは削除できます。
JavaScript には 2 つの形式のコメントが用意されています。1 つは /* */ で囲まれたブロック コメント、もう 1 つは // で始まる行コメントです。プログラムの読みやすさを向上させるために、コメントを広範囲に使用する必要があります。コメントはコードを正確に説明する必要があることに注意することが重要です。役に立たないコメントは、まったくコメントしないよりも悪いです。
/* */ で囲まれたブロック コメント フォームは、PL/I (Programming Language One の略) と呼ばれる言語に由来しており、その中の「I」は実際にはローマ数字の「one」であり、IBM A の 3 番目です。 1850 年代に同社が発明した世代の高級プログラミング言語)。 JavaScript では、*/ が正規表現リテラル内に出現する可能性があるため、コメント化されたコード ブロックに対してブロック コメントは安全ではありません。例:
/*
var rm_a = /a*/.match(s);
*/
は構文エラーになります。したがって、/* */ コメントを避け、// コメントに置き換えることをお勧めします。
2.2 識別子
識別子は文字で始まり、オプションで 1 つ以上の英数字またはアンダースコア文字が続きます。識別子には次の予約語は使用できません:
abstract
boolean Break byte
case catch char class const continue
debuggerdefault delete do double
else enum export extends
false Finalfinally float for function
goto
if 実装 in instanceof int インターフェイス
long
native new null
package private protected public
return
short static スーパースイッチ synchronized
this throw throws transient true try typeof
var volatile void
while with
このリストの予約語のほとんどは、この言語ではまだ使用されていません。このリストには、未定義、NaN、Infinity など、予約される必要があるが予約されていない一部の単語は含まれていません。 JavaScript では、変数またはパラメーターの名前に予約語を使用することはできません。さらに悪いことに、JavaScript では、オブジェクト リテラル内のオブジェクト プロパティ名として、またはプロパティ アクセス式内のピリオドの後に予約語を使用することができません。
識別子はステートメント、変数、パラメータ、プロパティ名、演算子、タグで使用されます。
2.3 数値
JavaScript には単一の数値タイプしかありません。これは内部的には Java の double と同じ 64 ビット浮動小数点数として表されます。 JavaScript では、1 と 1.0 は同じ値です。
数値リテラルに指数部がある場合、リテラルの値は、e の前の部分に e の後の部分の 10 乗を乗じて計算されます。したがって、100 と 1e2 は同じ数です。
負の数は、接頭辞演算子 - を使用して形成できます。
値 NaN は、正常な結果を生成できない操作の結果を表す数値です。 NaN は、それ自体を含め、どの値とも等しくありません。 isNaN(number) 関数を使用して NaN を検出できます。
値 Infinity は、1.79769313486231570e 308 より大きいすべての値を表します。
番号所有方法 (第 8 章を参照)。 JavaScript には Math オブジェクトがあり、これには数値を操作する一連のメソッドが含まれています。たとえば、Math.floor(number) メソッドを使用して数値を整数に変換できます。
2.4 文字列
文字列リテラルは一重引用符または二重引用符で囲むことができ、0 個以上の文字を含めることができます。エスケープ文字です。 JavaScript が作成されたとき、Unicode は 16 ビット文字セットであったため、JavaScript のすべての文字は 16 ビットです。
JavaScript には文字型がありません。文字を表すには、1 文字だけを含む文字列を作成するだけです。
エスケープ文字を使用すると、バックスラッシュ、引用符、制御文字など、通常は文字列に挿入できない文字を挿入できます。 u 規則を使用すると、文字コード ポイントの数値表現を指定できます。
“A”===”u0041”
文字列には長さ属性があります。たとえば、「seven」.length は 5 です。
文字列は不変です。文字列は一度作成されると変更できません。ただし、演​​算子を使用して他の文字列を連結して新しい文字列を取得することは簡単です。まったく同じ文字を同じ順序で含む 2 つの文字列は、同じ文字列とみなされます。つまり、
「c」「a」「t」 === 「cat」
は true です。
文字列にはいくつかのメソッドがあります (第 8 章を参照)。
2.5 ステートメント
コンパイル単位には、実行可能なステートメントのセットが含まれます。 Web ブラウザでは、各