<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 縮進 使用soft tab(4個空格)。 ~~~ var x = 1, y = 1; if (x < y) { x += 10; } else { x += 1; } ~~~ ## 單行長度 不要超過80,但如果編輯器開啟word wrap可以不考慮單行長度。 ## 分號 以下幾種情況后需加分號: * 變量聲明 * 表達式 * return * throw * break * continue * do-while ~~~ /* var declaration */ var x = 1; /* expression statement */ x++; /* do-while */ do { x++; } while (x < 10); ~~~ ## 空格 以下幾種情況不需要空格: * 對象的屬性名后 * 前綴一元運算符后 * 后綴一元運算符前 * 函數調用括號前 * 無論是函數聲明還是函數表達式,'('前不要空格 * 數組的'['后和']'前 * 對象的'{'后和'}'前 * 運算符'('后和')'前 以下幾種情況需要空格: * 二元運算符前后 * 三元運算符'?:'前后 * 代碼塊'{'前 * 下列關鍵字前:`else`,?`while`,?`catch`,?`finally` * 下列關鍵字后:`if`,?`else`,?`for`,?`while`,?`do`,?`switch`,?`case`,?`try`,`catch`,?`finally`,?`with`,?`return`,?`typeof` * 單行注釋'//'后(若單行注釋和代碼同行,則'//'前也需要),多行注釋'*'后 * 對象的屬性值前 * for循環,分號后留有一個空格,前置條件如果有多個,逗號后留一個空格 * 無論是函數聲明還是函數表達式,'{'前一定要有空格 * 函數的參數之間 ~~~ // not good var a = { b :1 }; // good var a = { b: 1 }; // not good ++ x; y ++; z = x?1:2; // good ++x; y++; z = x ? 1 : 2; // not good var a = [ 1, 2 ]; // good var a = [1, 2]; // not good var a = ( 1+2 )*3; // good var a = (1 + 2) * 3; // no space before '(', one space before '{', one space between function parameters var doSomething = function(a, b, c) { // do something }; // no space before '(' doSomething(item); // not good for(i=0;i<6;i++){ x++; } // good for (i = 0; i < 6; i++) { x++; } ~~~ ## 空行 以下幾種情況需要空行: * 變量聲明后(當變量聲明在代碼塊的最后一行時,則無需空行) * 注釋前(當注釋在代碼塊的第一行時,則無需空行) * 代碼塊后(在函數調用、數組、對象中則無需空行) * 文件最后保留一個空行 ~~~ // need blank line after variable declaration var x = 1; // not need blank line when variable declaration is last expression in the current block if (x >= 1) { var y = x + 1; } var a = 2; // need blank line before line comment a++; function b() { // not need blank line when comment is first line of block return a; } // need blank line after blocks for (var i = 0; i < 2; i++) { if (true) { return false; } continue; } var obj = { foo: function() { return 1; }, bar: function() { return 2; } }; // not need blank line when in argument list, array, object func( 2, function() { a++; }, 3 ); var foo = [ 2, function() { a++; }, 3 ]; var foo = { a: 2, b: function() { a++; }, c: 3 }; ~~~ ## 換行 換行的地方,行末必須有','或者運算符; 以下幾種情況不需要換行: * 下列關鍵字后:`else`,?`catch`,?`finally` * 代碼塊'{'前 以下幾種情況需要換行: * 代碼塊'{'后和'}'前 * 變量賦值后 ~~~ // not good var a = { b: 1 , c: 2 }; x = y ? 1 : 2; // good var a = { b: 1, c: 2 }; x = y ? 1 : 2; x = y ? 1 : 2; // no need line break with 'else', 'catch', 'finally' if (condition) { ... } else { ... } try { ... } catch (e) { ... } finally { ... } // not good function test() { ... } // good function test() { ... } // not good var a, foo = 7, b, c, bar = 8; // good var a, foo = 7, b, c, bar = 8; ~~~ ## 換行 換行的地方,行末必須有','或者運算符; 以下幾種情況不需要換行: * 下列關鍵字后:`else`,?`catch`,?`finally` * 代碼塊'{'前 以下幾種情況需要換行: * 代碼塊'{'后和'}'前 * 變量賦值后 ~~~ // not good var a = { b: 1 , c: 2 }; x = y ? 1 : 2; // good var a = { b: 1, c: 2 }; x = y ? 1 : 2; x = y ? 1 : 2; // no need line break with 'else', 'catch', 'finally' if (condition) { ... } else { ... } try { ... } catch (e) { ... } finally { ... } // not good function test() { ... } // good function test() { ... } // not good var a, foo = 7, b, c, bar = 8; // good var a, foo = 7, b, c, bar = 8; ~~~ ## 單行注釋 雙斜線后,必須跟一個空格; 縮進與下一行代碼保持一致; 可位于一個代碼行的末尾,與代碼間隔一個空格。 ~~~ if (condition) { // if you made it here, then all security checks passed allowed(); } var zhangsan = 'zhangsan'; // one space after code ~~~ ## 多行注釋 最少三行, '*'后跟一個空格,具體參照右邊的寫法; 建議在以下情況下使用: * 難于理解的代碼段 * 可能存在錯誤的代碼段 * 瀏覽器特殊的HACK代碼 * 業務邏輯強相關的代碼 ~~~ /* * one space after '*' */ var x = 1; ~~~ ## 文檔注釋 各類標簽@param, @method等請參考[usejsdoc](http://usejsdoc.org/)和[JSDoc Guide](http://yuri4ever.github.io/jsdoc/); 建議在以下情況下使用: * 所有常量 * 所有函數 * 所有類 ~~~ /** * @func * @desc 一個帶參數的函數 * @param {string} a - 參數a * @param {number} b=1 - 參數b默認值為1 * @param {string} c=1 - 參數c有兩種支持的取值</br>1—表示x</br>2—表示xx * @param {object} d - 參數d為一個對象 * @param {string} d.e - 參數d的e屬性 * @param {string} d.f - 參數d的f屬性 * @param {object[]} g - 參數g為一個對象數組 * @param {string} g.h - 參數g數組中一項的h屬性 * @param {string} g.i - 參數g數組中一項的i屬性 * @param {string} [j] - 參數j是一個可選參數 */ function foo(a, b, c, d, g, j) { ... } ~~~ ## 引號 最外層統一使用單引號。 ~~~ // not good var x = "test"; // good var y = 'foo', z = '<div id="test"></div>'; ~~~ ## 變量命名 * 標準變量采用駝峰式命名(除了對象的屬性外,主要是考慮到cgi返回的數據) * 'ID'在變量名中全大寫 * 'URL'在變量名中全大寫 * 'Android'在變量名中大寫第一個字母 * 'iOS'在變量名中小寫第一個,大寫后兩個字母 * 常量全大寫,用下劃線連接 * 構造函數,大寫第一個字母 * jquery對象必須以'$'開頭命名 ~~~ var thisIsMyName; var goodID; var reportURL; var AndroidVersion; var iOSVersion; var MAX_COUNT = 10; function Person(name) { this.name = name; } // not good var body = $('body'); // good var $body = $('body'); ~~~ ## 變量聲明 一個函數作用域中所有的變量聲明盡量提到函數首部,用一個var聲明,不允許出現兩個連續的var聲明。 ~~~ function doSomethingWithItems(items) { // use one var var value = 10, result = value + 10, i, len; for (i = 0, len = items.length; i < len; i++) { result += 10; } } ~~~ ## 函數 無論是函數聲明還是函數表達式,'('前不要空格,但'{'前一定要有空格; 函數調用括號前不需要空格; 立即執行函數外必須包一層括號; 不要給inline function命名; 參數之間用', '分隔,注意逗號后有一個空格。 ~~~ // no space before '(', but one space before'{' var doSomething = function(item) { // do something }; function doSomething(item) { // do something } // not good doSomething (item); // good doSomething(item); // requires parentheses around immediately invoked function expressions (function() { return 1; })(); // not good [1, 2].forEach(function x() { ... }); // good [1, 2].forEach(function() { ... }); // not good var a = [1, 2, function a() { ... }]; // good var a = [1, 2, function() { ... }]; // use ', ' between function parameters var doSomething = function(a, b, c) { // do something }; ~~~ ## 數組、對象 對象屬性名不需要加引號; 對象以縮進的形式書寫,不要寫在一行; 數組、對象最后不要有逗號。 ~~~ // not good var a = { 'b': 1 }; var a = {b: 1}; var a = { b: 1, c: 2, }; // good var a = { b: 1, c: 2 }; ~~~ ## 括號 下列關鍵字后必須有大括號(即使代碼塊的內容只有一行):`if`,?`else`,`for`,?`while`,?`do`,?`switch`,?`try`,?`catch`,?`finally`,?`with`。 ~~~ // not good if (condition) doSomething(); // good if (condition) { doSomething(); } ~~~ ## null 適用場景: * 初始化一個將來可能被賦值為對象的變量 * 與已經初始化的變量做比較 * 作為一個參數為對象的函數的調用傳參 * 作為一個返回對象的函數的返回值 不適用場景: * 不要用null來判斷函數調用時有無傳參 * 不要與未初始化的變量做比較 ~~~ // not good function test(a, b) { if (b === null) { // not mean b is not supply ... } } var a; if (a === null) { ... } // good var a = null; if (a === null) { ... } ~~~ ## undefined 永遠不要直接使用undefined進行變量判斷; 使用typeof和字符串'undefined'對變量進行判斷。 ~~~ // not good if (person === undefined) { ... } // good if (typeof person === 'undefined') { ... } ~~~ ## jshint 用'===', '!=='代替'==', '!='; for-in里一定要有hasOwnProperty的判斷; 不要在內置對象的原型上添加方法,如Array, Date; 不要在內層作用域的代碼里聲明了變量,之后卻訪問到了外層作用域的同名變量; 變量不要先使用后聲明; 不要在一句代碼中單單使用構造函數,記得將其賦值給某個變量; 不要在同個作用域下聲明同名變量; 不要在一些不需要的地方加括號,例:delete(a.b); 不要使用未聲明的變量(全局變量需要加到.jshintrc文件的globals屬性里面); 不要聲明了變量卻不使用; 不要在應該做比較的地方做賦值; debugger不要出現在提交的代碼里; 數組中不要存在空元素; 不要在循環內部聲明函數; 不要像這樣使用構造函數,例:`new function () { ... }`,?`new Object`; ~~~ // not good if (a == 1) { a++; } // good if (a === 1) { a++; } // good for (key in obj) { if (obj.hasOwnProperty(key)) { // be sure that obj[key] belongs to the object and was not inherited console.log(obj[key]); } } // not good Array.prototype.count = function(value) { return 4; }; // not good var x = 1; function test() { if (true) { var x = 0; } x += 1; } // not good function test() { console.log(x); var x = 1; } // not good new Person(); // good var person = new Person(); // not good delete(obj.attr); // good delete obj.attr; // not good if (a = 10) { a++; } // not good var a = [1, , , 2, 3]; // not good var nums = []; for (var i = 0; i < 10; i++) { (function(i) { nums[i] = function(j) { return i + j; }; }(i)); } // not good var singleton = new function() { var privateVar; this.publicMethod = function() { privateVar = 1; }; this.publicMethod2 = function() { privateVar = 2; }; }; ~~~ ## 雜項 不要混用tab和space; 不要在一處使用多個tab或space; 換行符統一用'LF'; 對上下文this的引用只能使用'_this', 'that', 'self'其中一個來命名; 行尾不要有空白字符; switch的falling through和no default的情況一定要有注釋特別說明; 不允許有空的代碼塊。 ~~~ // not good var a = 1; function Person() { // not good var me = this; // good var _this = this; // good var that = this; // good var self = this; } // good switch (condition) { case 1: case 2: ... break; case 3: ... // why fall through case 4 ... break; // why no default } // not good with empty block if (condition) { } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看