JavaScript コーディング標準 目次 インデント行の長さコメント変数宣言関数宣言名前ステートメント 簡単なステートメント複合ステートメントラベルreturn ステートメントif ステートメントステートメント用while ステートメントdo ステートメントswitch ステートメントtry ステートメント whitespaceクラスその他の提案 getElement直接 DOM 操作を避ける同期 AJAX{}と[], (カンマ) 演算子eval is EVIL JavaScript コーディング標準は、JavaScript コードを記述するときに使用する標準です。これらの標準は、クロックフォードによって概説された規則に触発されています。 http://javascript.crockford.com/code.html インデント インデントの単位は 4 スペースです 行の長さ 120 文字を超える行は避けてください。ステートメントが 1 行に収まらない場合は、それを分割する必要がある場合があります。ブレークは演算子の後 (理想的にはコンマの後) に置きます。演算子の後に区切りを入れると、コピー/貼り付けエラーがセミコロンの挿入によってマスクされる可能性が低くなります。次の行は 4 つのスペースでインデントする必要があります。 if (value.toLowerCase.indexOf("help") > -1 || value.toLowerCase.indexOf("broke") > -1 || value.toLowerCase.indexOf("outage") > -1) { g_form.setValue("priority", "1"); g_form.setValue("urgency", "1"); } コメント コメントは寛大にしてください。それらは後で、あなたが何をしたかを理解する必要がある人々(おそらくあなた自身)によって読まれます。コメントは、注釈を付けるコードと同じように、よく書かれていて明確でなければなりません。時折、ユーモアを交えてもいいかもしれません。フラストレーションや憤りはそうではありません。 コメントを最新の状態に保つことが重要です。誤ったコメントは、プログラムを読みにくくし、理解しにくくする可能性があります。 コメントを意味のあるものにします。すぐには見えないものに焦点を当てます。次のようなもので読者の時間を無駄にしないでください i = 0; // Set i to zero. 通常は行コメントを使用します。正式なドキュメント用にブロックコメントを保存します。 変数宣言 すべての変数は、使用する前に宣言する必要があります。JavaScript ではこれは必要ありませんが、そうすることでプログラムが読みやすくなり、暗黙のグローバルになる可能性のある宣言されていない変数を簡単に検出できるようになります。暗黙のグローバル変数は絶対に使用しないでください。 var ステートメントは、関数本体の最初のステートメントである必要があります。 var currentEntry; // currently selected table entry var level; // indentation level var size; // size of table 各変数には、独自の行とコメントを与える必要があります。使用不可: var i = 0, j = 1; 代わりにこれを使用してください。 var i = 0; var j = 1; JavaScript にはブロックスコープがないため、ブロックで変数を定義すると、他の C ファミリー言語に精通しているプログラマーを混乱させる可能性があります。関数の上部ですべての変数を定義します。 グローバル変数の使用は最小限に抑える必要があります。暗黙のグローバル変数は絶対に使用しないでください。 関数宣言 すべての関数は、使用する前に宣言する必要があります。 関数の名前とそのパラメーターリストの ( (左括弧) の間にスペースを入れないでください。) (右括弧) と { (左中括弧) の間に 1 つのスペースがあり、それがステートメント本文の先頭になります。本文自体はタブでインデントされています。} (右中括弧) は、関数の宣言の先頭を含む行に揃えられます。 function outer(msg) { var logMessage = "Log: " + msg; jslog(logMessage); } 名前 名前は26文字の大文字と小文字(A..Z、a ..z)、10 桁 (0 .. 9)、および _ (アンダーバー)。国際文字は、どこでもよく読めなかったり、理解されなかったりする可能性があるため、使用しないでください。名前に $ (ドル記号) または \ (バックスラッシュ) を使用しないでください。 _ (アンダーバー) を使用して、関数がスクリプトの外部で呼び出されることを意図していないことを示します。能力の欠如を示す慣習は避けてください。ローカル変数と関数は、小文字で始まり、camelCaseUpAndDown を使用する必要がありますグローバル変数は、g_form のように g_で始まる必要があります新しいプレフィックスと共に使用する必要があるコンストラクタ関数は、大文字で始まる必要があります ステートメント 簡単なステートメント 各行には、最大で 1 つのステートメントを含める必要があります。を置く;(セミコロン) をすべての簡単なステートメントの最後に追加します。関数リテラルまたはオブジェクトリテラルを代入する代入ステートメントは、代入ステートメントであり、セミコロンで終わる必要があることに注意してください。 JavaScript では、任意の式をステートメントとして使用できます。これにより、特にセミコロンの挿入が存在する場合に、いくつかのエラーが隠される可能性があります。ステートメントとして使用する必要がある式は、代入と呼び出しのみです。 複合ステートメント 複合ステートメントは、{ } で囲まれたステートメントのリストを含むステートメントです (中括弧)。 囲まれたステートメントは、4 つのスペースでインデントする必要があります。{ (左中括弧) は、複合ステートメントを開始する行の末尾に配置する必要があります。} (右中括弧) は行の先頭に置き、一致する { (左中括弧) を含む行の先頭に合わせてインデントする必要があります。 if (condition) { doSomething(); doSomethingElse(); } ラベル ステートメントラベルはオプションです。これらのステートメントのみにラベルを付ける必要があります:while、do、for、switch。 return ステートメント 値を含む return ステートメントでは、値を囲む ( ) (括弧) を使用しないでください。セミコロンの挿入を避けるために、戻り値の式は return キーワードと同じ行で始まる必要があります。 function shortDescriptionIsEmpty() { if (g_form.getValue(short_description) == "") return true; return false; } if ステートメント ステートメントの if クラスは、次の形式である必要があります。 if (condition) { statements } if (condition) { statements } else { statements } if (condition) { statements } else if (condition) { statements } else { statements } ステートメント用 ステートメントの for クラスは、次の形式である必要があります。 for (initialization; condition; update) { statements } for (variable in object) { if (filter) { statements } } この形式は、事前に決定可能な反復回数の配列およびループで使用する必要があります。 while ステートメント while ステートメントは、次の形式である必要があります。 while (condition) { statements } do ステートメント do ステートメントは、次の形式である必要があります。 do { statements } while (condition); 他の複合ステートメントとは異なり、do ステートメントは常に ;(セミコロン)。 switch ステートメント switch ステートメントは、次の形式である必要があります。 switch (expression) { case expression: statements default: statements } 各ケースはタブインする必要があります。 ステートメントの各グループ (デフォルトを除く) は、 break、 return、または throw で終わる必要があります。落ちないでください。 try ステートメント try クラスのステートメントは、次の形式である必要があります。 try { statements } catch (variable) { statements } whitespace 空白行は、論理的に関連するコードのセクションを設定することで、読みやすさを向上させます関数の値とその ((左括弧) の間に空白を使用しないでください。これは、キーワードと関数呼び出しを区別するのに役立ちます各;for ステートメントのコントロール部分の (セミコロン) の後にスペースを付ける必要があります。すべての , (カンマ) の後に空白を入れる必要があります クラス ServiceNow では、prototype.js ライブラリのサポートを受けながら、JavaScript に対してオブジェクト指向アプローチを使用しています。クラスは次のように定義されます。 var ClassNameHere = Class.create({ // constructor initialize: function(constructor_arguments) { // define instance variable here this.variable = initial_value; }, // functions defined here function1: function(arguments) { }, type: 'ClassNameHere' }); 別のクラスを拡張するサブクラスを作成するには、クラス定義は次のようになります。 var ClassNameHere = Class.create(ParentClassName, { ... 定数は、 initialize メソッドの前にインスタンス変数として定義され、大文字です。これらの変数は、 initialize メソッドで定義されたインスタンス変数と実際には変わらないことに注意してください。 var ClassNameHere = Class.create({ CONSTANT_VARIABLE1: 'constant_value1', CONSTANT_VARIABLE2: 'constant_value2', // constructor initialize: function(constructor_arguments) { // define instance variable here this.variable = initial_value; }, // functions defined here function1: function(arguments) { }, type: 'ClassNameHere' }); 定数、またはクラス静的は、実際には次のように定義する必要があります。 ClassNameHere.CONSTANT_VARIABLE1 = 'constant_value_1'; しかし、これを行うと、定数がクラス定義の後に移動され、ClassNameHere.CONSTANTを使用する前にvar ClassNameHereを定義する必要があるため、定数が見つけにくくなり、クラスが読みにくくなります。 その他の提案 getElement document.getElementById(id) の代わりに g_form.getElement(id) を使用してください。 直接 DOM 操作を避ける DOM 要素を変更する必要がある場合は、g_form.getElement(id) を使用して DOM 要素を取得します。 代わりに、最も一般的な操作では、次のg_form関数を使用します (GlideForm.js を参照)。 設定無効化セットディスプレイ必須の設定読み取り専用の設定設定値setVisible 同期 AJAX 次のような同期 AJAX は避けてください。 GlideRecord.js query() は呼び出しを行い、応答が返されるまでブラウザをブロックします (やむを得ない場合を除いて悪い)query(callbackFunc) は、ブラウザーをブロックせずに呼び出しを行い、応答が受信されると指定された callbackFunc を呼び出します (正常) GlideAjax GlideAjax.getXMLWait:ブラウザをブロックします (やむを得ない場合以外は不適切です)GlideAjax.getXML:応答の受信時にコールバック関数を呼び出します (良好) g_form.getReference は、ブラウザをブロックする同期 GlideRecord 呼び出しを行います (正しくありません)。これは必要な場合にのみ使用してください。代わりにこれを使用してください: var sysId = g_form.getValue(field_name); var gr = new GlideRecord(table); gr.query('sys_id', sysId, refCallback); function refCallback(gr) { // gr now has the GlideRecord with the results of the query } {}と[] new Object() の代わりに {} を使用します。new Array() の代わりに [] を使用します。メンバー名が連続した整数である場合は、配列を使用します。メンバー名が任意の文字列または名前である場合は、オブジェクトを使用します。 , (カンマ) 演算子 forステートメントの制御部分での非常に規律ある使用を除いて、コンマ演算子の使用は避けてください。(これは、オブジェクトリテラル、配列リテラル、var ステートメント、およびパラメーターリストで使用されるコンマ区切り文字には適用されません。 eval is EVIL eval 関数は、JavaScript の最も誤用されている機能です。避けてください。eval にはエイリアスがあります。Function コンストラクターは使用しないでください。setTimeout または setInterval に文字列を渡さないでください。