良いコーディング習慣を開発し、コードの保守性を改善
-
グローバル変数や関数を定義しないでください
グローバル変数と関数を定義し、それは、コードの保守性に影響を与えます。JavaScriptコードは、同じスコープの内部にページで実行している場合、コードのかもしれないとの相互影響の可能性があります。
グローバル変数の定義は、コード「公害」につながるため、問題を解決するための様々な手段があります。
1.最も簡単な方法は、オブジェクトのプロパティになりそうという、変数オブジェクトにパッケージ化された変数やメソッドにあります。例えば:
VAR myTes = {
長さ:0'
INIT:関数(){...}
アクション:関数(){...}
}
図2は、ローカルスコープ内に含まれるグローバル変数、完了論理スコープの定義に使用される、これらの変数および変数の別の変形例です。例えば、匿名関数を定義することによって達成することができます。
(関数()
{
VAR長さ= 0。
関数init(){...}
関数アクション(){...}
})()
すべては、この匿名関数のロジックに含まれる独立したモジュールを形成し、直ちに実行、最大コード間の「汚染」を防止します。もちろん、実際のビジネスでは、モジュール間の相互作用があり、その後、return文を使用し、リターン・インターフェースを開示する必要があります。
VARマイドキュメント=(関数()
{
VAR長さ= 0。
関数init(){...}
関数アクション(){...}
リターン{
INIT:INIT
}
})();
外部コードアクセスのinit()メソッドは、myDocument.initを呼び出すことができます。このコードは、巧みに、コード・ロジック・パッケージを行って、開示された外部インターフェイスへのアクセスを必要とするものモジュラーベストプラクティスです。
変数を定義するときに必ずvarキーワードことを確認してください3。あなたは、変数を定義するときにときに、ブラウザのパース、VARを使用していないと文句を言うが、この変数は自動的に、次のコードのように、グローバル変数に解決されるグローバル変数の長さが定義されていない場合:
(関数()
{
長さ= 0。
関数init(){...}
関数アクション(){...}
}
)()
-
簡素化されたエンコーディング
//オブジェクトの作成
VaRのpersion =新しいオブジェクト();
person.age = 23;
person.name = 'ダニエル';
読みます:
VaRの人= {年齢:23、名前: 'ダニエル'};
//配列の作成
VARリスト=新しい配列();
リスト[0] = 12、
リスト[1] = 20。
リスト[2] = 24。
読みます:
リスト= [12,20,24]でした。
-
代わりに、比較演算子を使用する== ===
-
ステートメントで使用しないでください
JavaScriptでは、ステートメントを使用して迅速かつ容易にオブジェクトのプロパティにアクセスするために使用することができます。次の形式で文:
(オブジェクト)と
{
.......
}
声明の原則である:javascirptの解析と実行している場合、単独の文と範囲を確立し、そして、それが直接アクセスすることができますプロパティのステートメントは、このスコープのローカル変数となっているとの組み合わせでます。例えば:
(数学)と
{
= PI * R * R。
}
次のコードは、上記のコードと等価です
A =にMath.PI * R *、R。
声明で使用するには、コードを単純化しますが、声明でも、いくつかのバグ互換性の問題をもたらしたかもしれません
- これは、オブジェクトが属するかを知るためには、実行時変数でのみ引用された文を使用して、内部変数のため、読み、コードを困難にします。例えば:
関数f(x、O)
{
(O)と
{
プリント(X)。
}
}
Xは上記のステートメントは、X、Xプロパティは、Oパラメータから来ることができるパラメータから導出することができます。
設計2.with文はまた、保証するものではありませんつまり、内部の変更を組み合わせて、内部に同期させることができない文を使用して、オブジェクトの後や文で、欠陥があるそのオブジェクトのデータの一貫性。例えば:
たグループ= {
値:{
ノード:1
}
}。
(group.value)と
{
group.value = {
ノード:2
}。
//エラー:1
console.log(ノード)。
}
//が正しく表示さ:2
console.log(group.value.node)。
-
evalの使用は避けてください
- evalの機能を使用すると読み、コードを困難に時々、それはコードの保守性に影響を与えます。以下のような:
変数で取得したオブジェクトの属性値の場合は、evalを( '。objの+キー)を使用することができます。
OBJ [キー]:実際には、プロパティの値は、以下の標準的な方法を用いて得ることができます
それが任意のコードを実行渡されますので、2のevalはまた、セキュリティ上の問題を使用して、着信コードはおそらく、未知のソースまたは制御されていないから来ています。
より厳格な符号化形式の使用
strictモードの目的は、主に、JavaScriptの文法上の場所への不当な排除することにより、コードの安全性を向上させること、コンパイラ効率、新しいバージョンのjavacscriptの将来と動作速度と優れた互換性を増大させることを意図しています。
厳格モードは主に、以下の不合理に改良を加え含まれます:不慮のグローバル変数を防ぐために、キーワードを無効にする、このポイントの機能は、もはや名前の重複を防止するためのグローバルなデフォルトでない名前の重複を防止するためのパラメータ、オブジェクトのプロパティを機能、そしてよりevalのなどを使用しても安全。
strictモードを有効に主にコードに次のコードを追加するために、非常に簡単です:
「厳格な使用」。
strictモードを使用する際に従うべきいくつかのベストプラクティス。
- 大きな画像でstrictモードを有効にしないでください
あなたがstrictモードを設定するには、コードの多くを与えたい場合は、グローバル、strictモードを有効にしないことが最良であること、いくつかの古いコードとの互換性のために、あなたはすぐに実行された機能でコードを入れて、関数の先頭でstrictモードを有効にすることができ、サンプルコードは次のように:
(関数(){
「厳格な使用」
// ..........
})();
2.あなたがより厳密にJavaScriptコードを記述したい場合は、ツールをチェックするJavaScriptコードを使用することができます。最も人気のあるは、JSLintとJSHintをチェックするための主要なツールです。